好的,这是一个琐碎的问题。问题是,我在这里找到的每个答案都有3/4个冲突的答案。
我有一个非常简单的问题。我有一个名为ABORT_SIGNAL的全局变量。到目前为止,它已声明为volatile int ABORT_SIGNAL
。我了解这并不能满足我的期望...就是...
我有两个线程可能会写入ABORT_SIGNAL。它将从0开始,几秒钟后变为1。其他线程将定期读取此变量,并检查该值是否已设置为1。
以下将实现这一目标....
#include <stdint.h>
atomic_int ABORT_SIGNAL;
...
// When updating the value ...
atomic_store(&ABORT_SIGNAL, someValue);
// When reading the value ...
if (atomic_load_explicit(&ABORT_SIGNAL, memory_order_relaxed))
doSomething()
其他人也建议我需要执行以下操作。
在每个写入问题atomic_thread_fence(memory_order_acq_rel);
之后和每个读取问题atomic_thread_fence(memory_order_acq_rel);
答案 0 :(得分:2)
如果想要获得语义,使用宽松的一致性没有多大意义。
但是,坦率地说,所有这些看起来都太复杂了,没有太多收获。
只需使用
_Bool _Atomic flag;
,然后是通常的操作,则不需要使用所有这些atomic_...
伪函数。您将获得顺序一致性。
然后,您可以调查这是否确实是瓶颈,并在特定位置替换为另一个一致性。