试图制作一个独特的 id 生成函数,并想出了这个:
std::atomic<int> id{0};
int create_id() {
id++;
return id.load();
}
但我认为该函数有可能两次返回相同的值,对吧?例如,线程 A 调用函数,增加值,然后在线程 B 进入并增加值时停止,最后 A 和 B 都返回相同的值。
因此,使用互斥锁,函数可能如下所示:
std::mutex mx;
int id = 0;
int create_id() {
std::lock_guard<std::mutex> lock{mx};
return id++;
}
我的问题:是否可以仅使用原子来创建从计数器生成唯一 int 值的行为?我问的原因是因为我需要产生很多 id,但读到 mutex 很慢。
原文由 Anonymous Entity 发布,翻译遵循 CC BY-SA 4.0 许可协议
只需使用:
请参阅 http://en.cppreference.com/w/cpp/atomic/atomic/operator_arith