尝试创建一个独特的ID生成函数,得到了以下结果:
但是我假设这个函数有可能返回相同的值两次,对吗?例如,线程A调用该函数,增加了值,但是在线程B进来并增加了值之后,A停止,最后A和B都返回相同的值。
因此,使用互斥锁,该函数可能如下所示:
我的问题是:是否可能仅使用原子操作来创建从计数器生成唯一整数值的行为?我之所以问这个问题,是因为我需要生成大量的ID,但听说互斥锁的速度很慢。
std::atomic<int> id{0};
int create_id() {
id++;
return id.load();
}
但是我假设这个函数有可能返回相同的值两次,对吗?例如,线程A调用该函数,增加了值,但是在线程B进来并增加了值之后,A停止,最后A和B都返回相同的值。
因此,使用互斥锁,该函数可能如下所示:
std::mutex mx;
int id = 0;
int create_id() {
std::lock_guard<std::mutex> lock{mx};
return id++;
}
我的问题是:是否可能仅使用原子操作来创建从计数器生成唯一整数值的行为?我之所以问这个问题,是因为我需要生成大量的ID,但听说互斥锁的速度很慢。
id
是类中的一个字段,就需要在std::atomic<int> id
后添加{0}
来初始化。 - Alex Reinkingstd::atomic_int
别名。 - juzzlin