静态局部变量的线程安全增量

2023-11-21

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(使用前将#替换为@)

静态局部变量的线程安全增量 的相关文章

随机推荐