我知道在java中,如果你有多個線程訪問一個未標記爲volatile的變量,你可能會得到一些意想不到的行爲。C#和java的volatile關鍵字的行爲方式是一樣的嗎?
例子:
private boolean bExit;
while(!bExit) {
checkUserPosition();
updateUserPosition();
}
如果標記bExit變量voilatile,這將gaurantee其他線程將看到最新的值。
c#的行爲方式是否一樣?
更新
例如,在C#中,如果你這樣做:
int counter = ...;
for(...)
{
new Thread(delegate()
{
Interlocked.Decrement(ref counter);
}
}
if(counter == 0)
{
// halt program
}
在上面,在C#中,你必須標記計數器變量揮發性或本會工作如預期?
每個* runtime *(JVM或CLR內存模型)都有一組不同的規則,並且有一些重疊。考慮在兩種語言/運行時間和比較中查找「volatile」的正確(和不正確)用法。 – user2246674 2013-05-01 20:07:54
C#volatile實際上是保留在低內存應用程序中使用的,應該只能用作絕對最後的手段。下面是一些文檔,以C#的形式來看看:http://msdn.microsoft.com/en-us /library/x13ttww7(v=vs.71).aspx – Nomad101 2013-05-01 20:09:08
@ Nomad101 - 我不確定低內存應用程序和volatile關鍵字之間存在什麼關係。 – hatchet 2013-05-01 20:15:46