布爾類型的賦值操作是否是原子操作如果不是為何原子操作類Interlocked中沒有關于布爾類型的操作
1 回答

慕姐4208626
TA貢獻1852條經驗 獲得超7個贊
當然是原子操作,同時包括所有對4字節及以下類型的賦值操作,但同時要注意的是由于還有cpu的cache,因此在修改bool對象時在多核cpu上可能不同核上看到的只是自己的cache的信息而已,所以就會有類似這樣的奇葩問題
var flag=true;
long x=0;
var thread=new Thread(()=>{
while(flag)
x++;
Console.WriteLine("done");
});
thread.Start();
Thread.Sleep(100);
flag=false;
thread.Join();
因此需要給點提示不要cpu再那傻傻的看著老黃歷繼續做著無用功(volatile或者Thread.MemoryBarrier())
- 1 回答
- 0 關注
- 1417 瀏覽
添加回答
舉報
0/150
提交
取消