c - 一个线程写入一个变量,另一个线程读取它

时间:2016-12-04 08:02:51

标签: c multithreading interlocked

在C中确保当一个线程写入变量时另一个线程可以读取更新值的正确方法是什么?我没有找到任何答案,尽管搜索和'可能已经有你的答案的问题',这给了我不是C的结果,并且有很多。

据我所知,它不在C中,所以我不得不依赖于平台特定的调用,但我正在寻找可跨平台移植的东西。我知道我可以使用锁,但我认为这会产生一些不必要的开销,因为我确定一个线程只需要从变量中读取而另一个线程只需要写入变量。我希望读取变量的线程一旦被修改就知道。是否有正确的非平台特定方式来做到这一点?感谢

1 个答案:

答案 0 :(得分:0)

  

对于便携式方法,您至少需要C11。在标准中   (作为草稿提供),你会想看,和   也可能在5.1.2.3的内存一致性模型规范中   程序执行。哦,挥发无效。 - ninjalj

右;为了扩展这个,可以写一个例子:

#include <stdatomic.h>
…
    // thread 1
    atomic_store(&variable, value);
…
    // thread 2
    value = atomic_load(&variable);
…

(您可能也对UNIX Portable Atomic Operations<stdatomic.h> in GCC 4.8?)感兴趣