str*_*ugi 6 c++ static multithreading
void foo() {
static int id = 0;
const int local_id = id++;
//do something with local_id;
}
Run Code Online (Sandbox Code Playgroud)
多个线程可以多次并行调用foo.我希望foo的每次调用都使用local_id的"唯一"值.上面的代码可以吗?我想知道第二个线程是否在第一个线程增加值之前将id的值赋给local_id.如果不安全,是否有任何标准解决方案?
您的代码不是线程安全的,因为多个线程可以id同时读取,并产生相同的值local_id.
如果你想要一个线程安全的版本,请使用std::atomic_intC++ 11中提供的版本:
void foo() {
static std::atomic_int id;
const int local_id = id++;
//do something with local_id;
}
Run Code Online (Sandbox Code Playgroud)