如何定义线程局部本地静态变量?

Hay*_*tuk 21 c c++ static multithreading thread-safety

如何定义不在不同线程之间共享的本地静态变量(在函数调用之间保持其值)?

我正在寻找C和C++的答案

Rom*_*Rom 12

在Windows上使用Windows API:TlsAlloc()/TlsSetValue()/ TlsGetValue()

在Windows上使用编译器内在:使用_declspec(线程)

在Linux(其他POSIX ???):get_thread_area()和相关

  • 你忘记了TlsFree :-) (3认同)

Lai*_*han 9

只需在函数中使用static和__thread即可.

例:

int test(void)
{
        static __thread a;

        return a++;
}
Run Code Online (Sandbox Code Playgroud)

  • __thread适用于linux,bsd,aix以及xl_c,gcc和许多其他编译器.在Windows上,它可以简单地#defined到__declspec(thread). (3认同)
  • @Ali:不,这是GCC和其他一些编译器提供的扩展.在MSVC上,我认为你使用`__declspec(thread)`代替. (2认同)