Aar*_*ght 17

没有原子类型这样的东西.只有操作可以是原子的.

读取和写入适合单个字的数据类型(int在32位处理器上,long在64位处理器上)在技术上是"原子的",但抖动和/或处理器可以决定重新排序指令,从而创建意外的竞争条件,因此您需要序列化访问权限lock,使用Interlocked类进行写入(在某些情况下读取),或声明变量volatile.

简短的回答是:如果两个不同的线程可以访问相同的字段/变量,并且其中至少有一个将要写入,则需要使用某种锁定.对于通常是Interlocked类的原始类型.

  • 对不起,我指的是一般条款:http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/package-summary.html http:// www-2 .cs.cmu.edu/afs/cs/project/pscico/doc/nesl/manual/node14.html http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com .ibm.ddi.doc/ddi160.htm http://download.oracle.com/docs/cd/B28359_01/gateways.111/b31053/ims_datatype_conver.htm我只是指出引用一个变量很常见作为基于一般意义上的类型的原子. (3认同)
  • 我并不反对你的回答,我只是被"没有原子类型的东西"这句​​话所困扰,尽管根据C#规范,我认为这是一个准确的陈述.我使用C#和许多其他语言工作,因此我经常考虑概念本身,而不是特定于实现. (2认同)