Java では、揮発性としてマークされていない変数に複数のスレッドがアクセスしている場合、予期しない動作が発生する可能性があります。
例:
private boolean bExit;
while(!bExit) {
checkUserPosition();
updateUserPosition();
}
bExit 変数を voilatile としてマークすると、他のスレッドが最新の値を見ることが保証されます。
c# は同じように動作しますか?
アップデート
たとえば、C# では次のようにします。
int counter = ...;
for(...)
{
new Thread(delegate()
{
Interlocked.Decrement(ref counter);
}
}
if(counter == 0)
{
// halt program
}
上記の C# では、カウンター変数を揮発性としてマークする必要がありますか?それとも期待どおりに機能しますか?