gpt4 book ai didi

c11 - atomic_load() 和赋值有什么区别?

转载 作者:行者123 更新时间:2023-12-02 19:59:04 52 4
gpt4 key购买 nike

我正在从事一个处理大量原子操作的项目。直到现在我还不知道atomic_load()并且仅依靠赋值运算符来获取原子类型的值,除了这么多测试之外我没有看到错误。这些原子类型由多个进程和线程以及 atomic_compare_exchange_strong_explicit() 更改, 所以他们每次都需要一个旧值,这就是我一直做的 oldValue = <Atomic_ type_variable>它总是工作正常。那只是偶然吗?我应该更喜欢使用 atomic_load() 吗?

最佳答案

foo = atomic_var 只是 foo = atomic_load(&atomic_var);

的快捷语法

它本身是 foo = atomic_load_explicit(&atomic_var, memory_order_seq_cst); 当您想使用比默认顺序更弱的顺序时,它有一个用例 seq_cst.

在源代码中显式使用 atomic_load 的主要原因可能是提醒人类读者变量或指针原子的。或者可能作为宏的一部分,使用 atomic_load(&(macro_input)) 会为非原子指针创建编译时错误。

作为“通用”函数,您不能将普通函数指针指向它。

它的存在可能只是为了方便编写语言标准,用函数来解释一切。


这里的关键不是实际的赋值,它是在右值上下文中评估原子变量(将其值作为表达式的一部分读取,就像您通常在= 的右侧)。 printf("%d\n", my_atomic_var); 也等同于 atomic_load


顺便说一句,atomic_var = foo;atomic_store_explicitmo_seq_cst 完全相同。在这里, 分配是关键。

其他类型的对原子变量的左值引用是不同的,像 read-modify-write atomic_var++ 等同于 atomic_fetch_add

关于c11 - atomic_load() 和赋值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292069/

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