I have a question about memory barriers in C#. If a write statment is the last statement in a method, for example (the variable v2 is the one of concern):
int _v1 = 0;
int _v2 = 0
void X()
{
_v1 = 2;
_v2 = 3;
Thread.MemoryBarrier();
}
Is the memory barrier statment necessary as the _v2 write is the last statement. In other words, does the processor recognize that this is the end of a method and should flush its cache to the memory.
Thanks in advance.
If you want a memory barrier to exist after the write to _v2 then you should keep the call to Thread.MemoryBarrier as-is. I have not seen any documentation that would suggest that a memory barrier is automatically injected after a method ends. If it is not documented then you have to assume that the C# compiler, JIT compiler, and hardware are all given maximum liberty in optimizing the code as they see fit even though in reality their options may be constrained by implementation details.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With