gpt4 book ai didi

c - 一个作者,多个读者在无锁应用中

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:41 49 4
gpt4 key购买 nike

我正在构建一个程序,其中变量仅由一个线程修改(原子地,双向的完整内存屏障),并读取多个线程。读取线程是否需要以原子方式读取变量或简单的读取就足够了?

通常(我使用 gcc,但我猜这个概念是独立于语言的)

int a = 0;

在写作线程中:

__atomic_add_fetch (&a, 1, __ATOMIC_SEQ_CST);

在阅读线程中:

int b = __atomic_load_n (&a, __ATOMIC_SEQ_CST);

/ * OR */

int b = a;

我的猜测是,如果唯一的作者在两个方向上都设置了完整的障碍,那么应该没有竞争条件,但我似乎找不到任何证据......

谢谢!

最佳答案

为了安全起见,您应该使用seq_cstacquire 内存模型进行原子加载。编译器或 CPU 可以采取一些技巧来优化缓存或寄存器的使用,并且不会以不同的顺序加载值或加载,因此使用特定于加载的屏障可能是个好主意。

将变量标记为 volatile 也有帮助。

关于c - 一个作者,多个读者在无锁应用中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316076/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com