void foo() {
static int id = 0;
const int local_id = id++;
//do something with local_id;
}
多个线程可以并行调用foo多次。我希望对foo的每个调用都使用local_id的“唯一”值。上面的代码可以吗?我想知道第二个线程是否在第一个线程增加id的值之前将其值分配给local_id。如果不安全,是否有任何标准解决方案?
您的代码不是线程安全的,因为多个线程可以id
同时读取并产生相同的值local_id
。
如果需要线程安全版本,请使用std::atomic_int
C ++ 11中提供的版本:
void foo() {
static std::atomic_int id;
const int local_id = id++;
//do something with local_id;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句