使用gcc,我的代码具有一个原子的128位整数,而不是一个线程要写入的整数,并且可以从31个线程中并行读取。我不在乎此变量与程序中任何其他内存的同步操作(即我可以接受编译器将对两个不同整数的两次写入重新排序),只要对该变量的读写操作是一致的即可。我只想保证对原子128位的写入“最终”保证可以反射(reflect)在从该变量读取的31个线程中。
使用宽松的内存模型安全吗?我应该注意哪些陷阱?
最佳答案
宽松的排序不能保证写入器线程所写入的值对任何读取器线程都是可见的。
读者只能看到变量的初始值,而看不到任何更改,这是有效的行为。但是,可以保证编写器线程始终至少看到他自己对该变量所做的更改(并且可能,但又不能保证,其他线程以后应用的任何更改)。
换句话说:您仍然在单个线程中获得顺序一致性,但是在不同线程之间却没有任何一致性。