我希望在一个线程内共享一个成员变量,但不在线程之间共享。
它的行为类似于静态成员,但它只是一个线程中的“全局”,它是一个线程局部变量。
我可以想到两个解决方案:
首先,在每个线程中创建一个局部变量,然后将此变量作为参数传递给每个使用它的方法。(这会导致耦合)
或者,定义一个名为MyStruct的结构,其中包含一个线程局部变量和一个线程ID,然后将所有这些MyStructs作为一个向量,将此向量用作静态成员变量。
每次使用这个成员变量,首先获取线程ID,然后找到具有相同线程ID的MyStruct,如果没有找到,则推回一个新的MyStruct。在线程结束之前删除这个Mystruct。(这很不方便)
有简单的解决方案吗?
答案 0 :(得分:6)
C ++支持自C ++ 11以来的线程局部变量,使用thread_local
关键字。
可以在static
成员变量上使用。
使用为此设计的语言工具比尝试创建自己的语言工具简单得多。有很多关于初始化顺序和重入的细节,然后是最终的破坏,如果没有编译器的帮助,很难做到这一点。