atomic.store 和atomic_thread_fence有什么区别?
What's the difference between atomic.store and atomic_thread_fence?
我被问到F和G的这两个功能之间的差异:
atomic<int> var(1);
int a = 1;
void f() {
a=123;
var.store(0, std::memory_order_release);
}
void g() {
a=123;
std::atomic_thread_fence(std::memory_order_release);
var.store(0, std::memory_order_relaxed);
}
我认为它们具有相同的效果,因为如果其他线程读取var=0
,我们可以确定a=123
,对吗?
两个功能f()
和g()
都是发布逻辑的正确实现,并且表现相同。
如果var==0
取决于是否获取数据,其他线程是否读取a==123
:
if (var.load(std::memory_order_acquire) == 0)
{
assert(a==123);
}
或:
if (var.load(std::memory_order_relaxed) == 0)
{
std::atomic_thread_fence(std::memory_order_acquire);
assert(a==123);
}
两个断言不能开火
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- C++std::atomic在程序员级别保证了什么
- MyType 允许 std::atomic 的确切要求是什么<MyType>?
- Red Hat:使用<atomic>编译很好,但链接器找不到__atomic_store_16;什么库?
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 在 atomic() 中 ++、add operation 和 fetch_add() 有什么区别
- 最接近"std::atomic<std::vector>"是什么?
- atomic.store 和atomic_thread_fence有什么区别?
- 什么's是对std::atomic<T>
- boost::atomic的标头是什么
- 在C++11 std::atomic中,++、--和==等运算符使用的memory_order是什么
- c++,std::atomic,什么是std::memory_order以及如何使用它们
- "atomic"和"cstdatomic"有什么区别?
- std::atomic到底是什么?