布尔类型的赋值操作是否是原子操作如果不是为何原子操作类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 关注
- 1359 浏览
添加回答
举报
0/150
提交
取消