【问题标题】:Please share a sample code of thread_local in c++ [closed]请分享c++中thread_local的示例代码[关闭]
【发布时间】:2020-06-26 00:00:28
【问题描述】:

thread_local声明的变量是否需要'LocalAlloc'分配?

如果我有一个类定义为:

class B2 
{
public: 
  int data;
};thread_local B2 BObject2;

这个article的示例代码中如何使用这个类

【问题讨论】:

  • 您混淆了 C++ 语言功能和 Windows 操作系统 API。 thread_localLocalAlloc 完全没有关系。

标签: c++ thread-local


【解决方案1】:

你似乎在这里混合了两种不同的东西。

thread_local 由 C++ 11 标准定义,因此由 c++ 运行时决定如何实现它。 thread_local 与平台无关。所以不,你不需要使用“LocalAlloc”。

您指出的文章早于 C++ 11 标准,是 Win32 (windows) 提供的用于创建线程本地数据的原始服务。

我不会混合使用这两种类型。 MSVC C++ 标准库很可能会使用这些 win32 服务实现 thread_local。

由于 thread_local 与平台无关,我建议您使用它,它将使您的代码跨平台(在这方面),并将其留给 MSVC C++ 运行时来解决。

【讨论】:

  • 谢谢谢恩。我如何使用'BObject2;' ?有示例代码吗?
  • 像任何其他对象实例一样。除了实例数据是线程本地的外,没有什么区别。所以每个线程都有自己的实例数据。
  • 嗨Shane,你是说'所以不,你不需要使用“LocalAlloc”......这是什么意思?如果我使用thread_local来装饰一个类,它会被当作线程本地存储变量吗?如果是,我如何从插槽中检索值?我什至还没有定义索引。
  • 您变得非常困惑...忽略与该 win32 链接有关的所有内容。你不需要知道任何关于它的事情。您只需要了解 thread_local 链接。如果您正确阅读了 thread_local 链接。您需要做的就是使用 thread_local 声明一个静态/全局变量并完成。随意使用变量。例如静态thread_local int x;其中 static int x 将在所有线程中具有相同的值。 static thread_local int x 在你的进程中每个线程都有一个不同的值。
  • 链接底部是一个使用thread_local的例子。
猜你喜欢
  • 2011-01-24
  • 2010-10-19
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多