繁体   English   中英

C++ atomics memory 订购某些特定用例

[英]C++ atomics memory ordering for some specific use case

我处于下一种情况,我使用atomic<uint64_t>作为计数器并从 5 个或更多线程递增它,并使用递增之前的值来做出一些决定。

atomic<uint64_t> global_counter;

void thread_funtion(){
    uint64_t local_counter = global_counter.fetch_add(1,std::memory_order_relaxed);
    if(local_counter == 24)
       do_somthing(local_counter);
}

thread_funtion()将由 5 个不同的线程执行。 一旦我得到local_counter ,我的代码就不再关心 global_counter 在global_counter thread_funtion()运行时是否再次更改(业务逻辑的方式是,我只需要每个thread_function()调用都有一个唯一的递增值)。

在这种情况下使用std::memory_order_relaxed安全吗?

atomic<...>::fetch_add(..., std::memory_order_relaxed)保证原子执行,但仅此而已。

但即使使用memory_order_relaxed ,也只有一个线程调用do_something() 由于此fetch_addglobal_counter上的唯一操作,并且它是原子执行的,因此必须恰好达到值24一次。 但是不能保证它将是哪个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM