[英]Atomicness for a global variable shared by threads
好的,这是一个琐碎的问题。 问题是,我在这里找到的每个答案都有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);
如果要获取语义,则使用宽松的一致性没有太大意义。
但是,坦率地说,所有这些看起来都太复杂了,没有太多收获。
只需使用
_Bool _Atomic flag;
然后执行通常的操作,则无需使用所有这些atomic_...
伪函数。 您将获得顺序一致性。
然后,您可以调查这是否确实是瓶颈,并在特定位置用另一个一致性替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.