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

void foo() {
    static int id = 0;
    const int local_id = id++;
    //do something with local_id;
}

多个线程可以并行调用foo多次。我希望对foo的每个调用都使用local_id的“唯一”值。上面的代码可以吗?我想知道第二个线程是否在第一个线程增加id的值之前将其值分配给local_id。如果不安全,是否有任何标准解决方案?

谢尔盖(Sergey Kalinichenko)

您的代码不是线程安全的,因为多个线程可以id同时读取并产生相同的值local_id

如果需要线程安全版本,请使用std::atomic_intC ++ 11中提供的版本

void foo() {
    static std::atomic_int id;
    const int local_id = id++;
    //do something with local_id;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

静态方法和线程安全中的局部变量

来自分类Dev

局部变量是线程安全的吗?

来自分类Dev

Kotlin局部变量线程安全

来自分类Dev

线程安全局部变量

来自分类Dev

Java局部变量线程安全

来自分类Dev

C ++:是否使用IIFE线程安全初始化静态局部变量?

来自分类Java

为什么局部变量在Java中是线程安全的

来自分类Dev

仅具有局部变量的实例方法的线程安全

来自分类Dev

具有局部变量的全局方法线程安全

来自分类Dev

局部静态变量初始化是线程安全的

来自分类Dev

使用线程安全针对局部变量和全局变量进行Java垃圾收集

来自分类Java

Java实例变量在局部变量内引用。内存,线程安全性和完成

来自分类Dev

如何为每个实例提供非静态线程局部变量

来自分类Dev

关于静态局部变量的澄清

来自分类Java

静态类中的重复局部变量

来自分类Dev

Google测试和静态局部变量

来自分类Dev

内联模板功能的静态局部变量

来自分类Dev

Go中的静态局部变量

来自分类Dev

C ++ 11中的静态局部变量?

来自分类Dev

Python局部变量是静态确定的吗?

来自分类Dev

静态局部变量和自动

来自分类Dev

静态局部变量中的竞争条件

来自分类Dev

静态内部类中的局部变量

来自分类Dev

将功能模板中的静态局部变量的地址用作类型标识符是否安全?

来自分类Dev

在匿名线程的上下文中访问局部变量是否安全?

来自分类Dev

C#并行循环局部变量线程安全信息

来自分类Linux

线程局部变量和fs段

来自分类Java

是局部变量方法的线程共享?

来自分类Dev

在OpenMP中重置线程局部变量