1
3
如果你真的需要确保
有了这个,您可以确保如果您:
然后
为了反映以后对您的问题的编辑,您正在寻找一个无锁方法,那么,这完全取决于您使用的处理器和多长时间
假设这些在内存中是连续的,每个32位,并且您的处理器具有原子64位读取,那么您可以发出原子64位读取来读取这两个值,解析64位值中的两个值,进行数学运算并返回您想要返回的值。假设您不需要原子更新”
|
2
3
您必须确保这两个值中的任何一个被读取或写入,它们都被内存屏障(锁或关键部分)包围。
…
|
3
3
如果您的目标是x86,那么您可以使用64位比较/交换支持,并将这两个int都打包到一个64位字中。 在Windows上,您可以执行以下操作:
真难看。我建议使用一个锁——更易于维护。 编辑: 要更新和读取各个部分:
|
4
1
没有锁是不可能做到这一点的。据我所知,没有处理器具有双原子读。 |
Rasim Avcı · 如何履行承诺。解析需要原子化的代码 6 年前 |
Lingxi · 真正测试std::atomic是否无锁 6 年前 |
Rajeev Mehta · 修改和读取原子变量 6 年前 |
Chris Jefferson · 在Rust中获得“无序”语义 6 年前 |
Jérôme B · redis自动切换值 7 年前 |
krimog · 更新where select,保证原子性 7 年前 |