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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)