- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个处理大量原子操作的项目。直到现在我还不知道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_explicit
和 mo_seq_cst
完全相同。在这里, 分配是关键。
其他类型的对原子变量的左值引用是不同的,像 read-modify-write atomic_var++
等同于 atomic_fetch_add
。
关于c11 - atomic_load() 和赋值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292069/
我正在从事一个处理大量原子操作的项目。直到现在我还不知道atomic_load()并且仅依靠赋值运算符来获取原子类型的值,除了这么多测试之外我没有看到错误。这些原子类型由多个进程和线程以及 atomi
我正在从事一个处理大量原子操作的项目。直到现在我还不知道atomic_load()并且仅依靠赋值运算符来获取原子类型的值,除了这么多测试之外我没有看到错误。这些原子类型由多个进程和线程以及 atomi
我有一个单一的作者,多个读者的情况。有一个线程正在写入的计数器,任何线程都可以读取该计数器。由于单写线程不用担心与其他线程争用数据访问,下面的代码安全吗? #include #include _A
为什么 C11 atomic_load/atomic_store 函数中的参数具有 volatile 限定符?众所周知,volatile 对于并发用例(例如 1、2)毫无用处。 atomic_load
在这个简单的 C11 程序中 #include int f(atomic_int* obj) { return atomic_load(obj); } 我希望生成的程序集包含内存屏障。即使加载本
我看不出有任何理由为“ native ”CPU 积分增加额外开销,但我可能错了,所以我想听听社区的意见 我真正的问题涉及某种链表,它的变化相对较少但经常被读取(类似于典型的 RCU 用例)。这个想法是
我正在尝试了解如何使用原子操作安全地管理共享指针。原来 VC11 (Visual studio 2012) 支持 C++11,因此可以允许在 std::shared_ptr 上进行读/写竞争。我想检查
我是一名优秀的程序员,十分优秀!