如何从pthread ID检索pthread_key_t? 我试图用C++实现一个简单的方法来存储和检索C++中的线程局部变量。类似于Java中的ThreadLocal。我得到了创建线程时创建pthread\u key\t的部分,但是如何从线程代码中的任何位置获得该值?我可以使用pthread_self来获取我的线程ID,但是一旦我有了它,是否可以获取TLS密钥

如何从pthread ID检索pthread_key_t? 我试图用C++实现一个简单的方法来存储和检索C++中的线程局部变量。类似于Java中的ThreadLocal。我得到了创建线程时创建pthread\u key\t的部分,但是如何从线程代码中的任何位置获得该值?我可以使用pthread_self来获取我的线程ID,但是一旦我有了它,是否可以获取TLS密钥,c++,pthreads,C++,Pthreads,附言:我知道Boost会这样做,但我没有使用Boost,你通常不会创建pthread\u key\t当你创建线程时,你会在创建之前创建一次,并将密钥id保存在某个地方 完成后,每个线程对键的内容都有自己的值,您可以使用pthread\u setspecific()和pthread\u getspecific()设置和获取内容分别。使用pthread\u getspecific代表调用线程返回当前绑定到指定键的值,并使用pthread\u setspecific将特定于线程的值与通过先前调用pth

附言:我知道Boost会这样做,但我没有使用Boost,你通常不会创建
pthread\u key\t
当你创建线程时,你会在创建之前创建一次,并将密钥id保存在某个地方


完成后,每个线程对键的内容都有自己的值,您可以使用
pthread\u setspecific()
pthread\u getspecific()设置和获取内容
分别。

使用
pthread\u getspecific
代表调用线程返回当前绑定到指定键的值,并使用
pthread\u setspecific
将特定于线程的值与通过先前调用
pthread\u key\u create
获得的键相关联,您是说调用pthread_key_在创建每个线程之前创建,然后将该值传递给线程?然后,一旦创建,线程就可以将该值与其线程ID一起存储起来。之后,就需要获取线程ID并找到密钥了?不,只需调用一次,而不是每个线程调用一次。您也不需要对线程ID执行任何操作。只需让所有线程都可以访问
pthread\u键
。get/setspecific函数可以在任何线程中与同一个键一起使用,在每个线程中提供一个不同的值(如果没有设置任何值,则为NULL)。