Normally you would write this to make a temporary copy of your event in case something happend with SomeEvent:
EventHandler tmp = SomeEvent; if (tmp != null) tmp(this, EventArgs.Empty);
Well you might consider this code below according to Jeffrey Richter his CLR via C# book.
The code above can cause some trouble because a compiler might optimize this code and remove the temporary copy of your event (depends on the implementation of the compiler).
EventHandler tmp = Interlocked.CompareExchange(ref SomeEvent, null, null); if (tmp != null) tmp(this, e);
[ source ]