Использование потокового локального хранилища в библиотеке динамических ссылок - PullRequest
0 голосов
/ 17 июня 2019

У меня есть кроссплатформенный проект C ++, использующий переменную thread_local, и он будет предоставлен в dll. этот код хорошо работает в Linux GCC, но на платформе Windows vc2019 кажется, что я не могу использовать __declspec(dllexport) и локальный поток вместе , Или он будет генерировать

[Ошибка компилятора C2492]

это от Microsoft

код - это простая глобальная переменная типа int:

extern thread_local int threadid;

наконец я получаю два вей:

сначала от 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
...