当前位置:  开发笔记 > 程序员 > 正文

增量器/减量器(var ++,var--)等线程是否安全?

如何解决《增量器/减量器(var++,var--)等线程是否安全?》经验,为你挑选了2个好方法。

灵感来自这个问题:在复杂性分析中,为什么++被认为是2个操作?

请使用以下伪代码:

class test
{
   int _counter;
   void Increment()
   {
     _counter++;
   } 
}

在x86架构上,这会被认为是线程安全的吗?还有更多的是Inc/Dec装配说明线程安全吗?



1> Rob Kennedy..:

不,递增不是线程安全的.既不是INCDEC指示.它们都需要加载和存储,并且在另一个CPU上运行的线程可以自己加载或存储在这些操作之间交错的相同内存位置上.

有些语言内置了对线程同步的支持,但它通常是你必须要求的东西,而不是你在每个变量上自动获得的东西.那些没有内置支持的人通常可以访问提供类似功能的库.



2> Michael Burr..:

总之,没有.

您可以使用类似于InterlockedIncrement()您的平台的东西.在.NET上,您可以使用Interlocked类方法(Interlocked.Increment()例如).

甲罗布肯尼迪提到,即使操作在单个方面实现INC指令,只要存储器而言的步骤的读/增量/写集合被执行.多处理器系统有机会腐败.

还有一个volatile问题,这是使操作线程安全的必要部分 - 但是,标记变量volatile不足以使其成为线程安全的.使用平台提供的互锁支撑.

这通常是正确的,当然在x86/x64平台上也是如此.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有