Aim*_*ang 6 c++ concurrency atomic memory-barriers
std::atomic<int> unique_ids;
void foo() {
int i = unique_ids.fetch_add(1, std::memory_order_relaxed);
std::cout<<i;
}
int main(int argc, char* argv[]) {
std::vector<std::thread> threads;
for (int i = 0; i < 9; ++i) {
threads.emplace_back(foo);
}
for (int i = 0; i < 9; ++i) {
threads[i].join();
}
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的目标是使用atomic为并发程序生成唯一的id,但我不关心命令.
对于上面的代码,我的理解是foo中的输出值应该是不同的,尽管它们的顺序不能保证.
我测试了上面的代码一百次,所有结果都是我的预期.我是原子/记忆秩序的初学者,任何人都可以帮助我澄清我的理解吗?
提前致谢.爱民
PS我想指出这个问题与c ++,std :: atomic,什么是std :: memory_order以及如何使用它们不同,因为我的问题是关于memory_order_relaxed的理解而不是一般问题关于原子和记忆顺序的解释.