如何使静态成员变量在不同的线程中具有不同的值?

时间:2015-09-15 00:17:46

标签: c++ multithreading

我希望在一个线程内共享一个成员变量,但不在线程之间共享。

它的行为类似于静态成员,但它只是一个线程中的“全局”,它是一个线程局部变量。

我可以想到两个解决方案:

首先,在每个线程中创建一个局部变量,然后将此变量作为参数传递给每个使用它的方法。(这会导致耦合)

或者,定义一个名为MyStruct的结构,其中包含一个线程局部变量和一个线程ID,然后将所有这些MyStructs作为一个向量,将此向量用作静态成员变量。

每次使用这个成员变量,首先获取线程ID,然后找到具有相同线程ID的MyStruct,如果没有找到,则推回一个新的MyStruct。在线程结束之前删除这个Mystruct。(这很不方便)

有简单的解决方案吗?

1 个答案:

答案 0 :(得分:6)

C ++支持自C ++ 11以来的线程局部变量,使用thread_local关键字。

可以在static成员变量上使用。

使用为此设计的语言工具比尝试创建自己的语言工具简单得多。有很多关于初始化顺序和重入的细节,然后是最终的破坏,如果没有编译器的帮助,很难做到这一点。