如何从pthread ID中检索pthread_key_t

How can you retrieve pthread_key_t from pthread ID?

本文关键字:pthread key 检索 ID      更新时间:2023-10-16

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

附言:我知道Boost可以做到这一点,但我没有使用Boost

创建线程时通常不会创建pthread_key_t,而是在此之前创建一次,然后将密钥id保存在某个位置。

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

使用pthread_getspecific代表调用线程返回当前绑定到指定键的值,使用pthread_setspecific将线程特定值与通过上一次调用pthread_key_create获得的键相关联。