【问题标题】:How to make a static member variable have different values in different threads?如何使静态成员变量在不同线程中具有不同的值?
【发布时间】:2015-12-11 02:27:00
【问题描述】:

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

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

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

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

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

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

有简单的解决办法吗?

【问题讨论】:

  • 完全不清楚您的实际要求,抱歉。
  • @πάνταῥεῖ:真的吗?他确切地说他想要:(1)一个成员变量,(2)一个静态成员和(3)一个线程局部变量。在前两句中。
  • @5gon12eder:这恰恰相反。该 OP 已经知道线程局部变量是什么,并询问如何在 C++ 中执行此操作。另一个发现了一个用于创建线程局部变量的新关键字,并询问它们是什么。
  • @BenVoigt 是的,但我认为另一个问题的答案(尤其是那些有代码的问题)应该为 OP 提供足够的信息来解决问题。没有?

标签: c++ multithreading


【解决方案1】:

C++ 从 C++11 开始支持线程局部变量,使用 thread_local 关键字。

可用于static成员变量。

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

【讨论】:

  • 谢谢,这正是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多