首页 新闻 搜索 专区 学院

布尔类型的赋值操作是否是原子操作

0
悬赏园豆:50 [已解决问题] 解决于 2017-11-21 15:11

布尔类型的赋值操作是否是原子操作

如果不是

为何原子操作类Interlocked中没有关于布尔类型的操作

海之殇的主页 海之殇 | 菜鸟二级 | 园豆:478
提问于:2017-11-21 14:56
< >
分享
最佳答案
0

当然是原子操作,同时包括所有对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())

收获园豆:50
Daniel Cai | 专家六级 |园豆:10374 | 2017-11-21 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册