..
.
, volatile , - #. ?
MSDN : ", volatile, , ". , "" .
#
, , volatile? , # ? ?
. , . , .
CLR 2.0
2: , .. .
, , # (, , ), . ( # , 2):
, - : " .NET 2.0 - , ". (...) ECMA # , , .NET Framework (, , .NET Framework 4.5 ARM).
, ?
, . " ", store/load . , . .
, . - ?
. / , , .
, : .
. :
volatile # : , . / .
Microsoft # : , . OpCodes.Volatile, . .
, #, , .
bool complete = false;
var t = new Thread (() =>
{
bool toggle = false;
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep(1000);
complete = true;
t.Join();
? Memory.Barrier , ?
: , . ( ) .
: , / . # Thread.MemoryBarrier , , , .
. , ( Release ), , while. ? . :
if(complete) return;
toggle = !toggle;
if(complete) return;
toggle = !toggle;
if(complete) return;
toggle = !toggle;
...
complete volatile, , complete.
, CLR (. 6) (!) . , :
if(complete) return;
toggle = !toggle;
toggle = !toggle;
toggle = !toggle;
...
, , .
toggle = !toggle, .
if(complete) return;
toggle = !toggle;
if(complete) return;
toggle = !toggle;
if(complete) return;
toggle = !toggle;
...
, , . , .