在动态链接库中使用线程本地存储

时间:2019-06-17 02:52:53

标签: dll thread-local

我有一个使用thread_local变量的跨平台C ++项目,它将在dll中提供。此代码在linux gcc上工作良好,但在Windows vc2019平台上,看来我无法使用__declspec(dllexport)和local local在一起,否则它将生成

  

[编译器错误C2492]

这是来自Microsoft

code是一个简单的全局int变量:

extern thread_local int threadid;

最后我得到了两个wey:

首先从microsoft开始,这有点复杂。

第二,不要在头文件中声明thread_local变量,而使用get函数来访问它,就像这样:

#ifdef OS_WIN
DLL_EXPORT int getThreadId();
DLL_EXPORT threadLocalWrap& getThreadLocalWrap();
#else
extern thread_local int threadid;
extern thread_local threadLocalWrap _threadLocalWrap;
#define getThreadId() threadid
#define getThreadLocalWrap() _threadLocalWrap
#endif

0 个答案:

没有答案