3

使用 gcc,我的代码有一个原子的 128 位整数,而不是由一个线程写入,并从 31 个线程并发读取。我不关心这个变量与我程序中任何其他内存同步的操作(即,我可以接受编译器将两次写入重新排序到两个不同的整数),只要读取和写入这个变量是一致的。我只想保证对原子 128 位的写入“最终”保证反映在从该变量读取的 31 个线程中。

使用宽松的记忆模型是否安全?我应该注意哪些问题?

4

1 回答 1

3

宽松的排序不保证写入线程写入的值对任何读取线程都是可见的。

读者只看到变量的初始值而没有看到任何变化是有效的行为。但是,可以保证编写器线程始终至少看到他自己对变量所做的更改(并且可能,但同样不能保证,其他线程应用的任何后续更改)。

换句话说:您仍然在单个线程中获得顺序一致性,但不同线程之间没有任何一致性。

于 2013-06-11T20:06:57.837 回答