使用atomic_fetch_add_explicit创建计数器

时间:2016-04-21 18:49:38

标签: c atomic c11

this

在上面的C片段中,我相信可以使用#include <stdatomic.h> void request_number(request_t *request) { static atomic_int counter; request->id = atomic_fetch_add_explicit(&counter, 1, memory_order_relaxed); printf("Request assigned ID %u\n" request->id); } ,因为即使没有内存屏障,编译器也不会重新安排对memory_order_relaxed的调用和printf的获取,在存储request->id的值之前。

这是对的吗?我非常肯定它是,但想要绝对确定,以防有其他事情需要考虑原子。

1 个答案:

答案 0 :(得分:2)

你只做一次原子操作,当你从它返回时,你就有了自己的价值。其他一切都是通过&#34; normal&#34;内存模型就像顺序代码一样,就像它一直以来一样。

分配结束时的;是一个序列点。所以你的方法非常好。事实上,你在原子操作中唯一需要的是它是不可分割的,你不需要正常的#34;顺序保证。原子操作。