[英]Lock-free data structures in C++ = just use atomics and memory-ordering?
[英]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_add
是global_counter
上的唯一操作,并且它是原子执行的,因此必须恰好达到值24
一次。 但是不能保证它将是哪个线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.