我正在解决在多线程环境中迭代计算答案下限的问题。
在计算过程中,可能发生线程数量试图更新公共基本变量的情况。对我而言,这并不重要,其中哪个会成功书写其价值而哪个会失败。
我唯一关心的问题是,如果其中一个线程可能写入部分原语(例如,第一个字节),而另一个线程可能写入另一部分(例如,最后字节),结果该原语的值将是与线程试图写的内容无关。
与官方文献的链接将不胜感激。
提前致谢。
最佳答案
我唯一关心的问题是
如果有可能其中一个线程
会写一部分原语
(例如第一个字节),另一个将
写另一部分(例如最后一个字节)
结果就是
原语将不是
线程试图写。
引用Java Language Specification:
如果不是double或long变量
声明为volatile,然后
加载,存储,读取和目的
写动作,就好像
他们是32位的两个变量
每个:只要规则需要一个
在这些动作中,有两个是
每个32位的一半执行一次。
一个64位的方式
double或long变量被编码
分为两个32位
与实施有关。负载
存储,读取和写入操作
volatile变量是原子的,即使
变量的类型为double或
长。
写入其他原语始终是原子的。但是,如果未将其声明为volatile
,则其他线程可能在任意长时间内看不到更新。