我如何反向映射(散列)`pthread_t`s来构造指针?

时间:2010-06-27 02:59:59

标签: c data-structures hashtable pthreads

我在解释器实现中有一个thread数据类型,用于我正在编写的编程语言。由于各种原因,这是一个相当常见的操作,需要获取当前 thread(它本身就是一个指针:struct thread*)。

然而,pthread_self(3)递给我pthread_t,这是一种不透明的类型;在某些系统上,它似乎是unsigned long,但我听说我不能依赖于这种情况。我怀疑哈希表是这个唯一映射的正确实现(pthread_t ID到struct thread指针);但是,我不知道如何哈希 pthread_t可靠。

我很感激任何有pthread(3)经验的人的建议,或者真的,任何你必须“散列”不透明数据类型的情况。

1 个答案:

答案 0 :(得分:5)

我认为保留struct thread*的最佳方式是线程本地存储。类似的东西:

static pthread_key_t struct_thread_key;
pthread_key_create(&struct_thread_key, NULL);

在线程初始化中:

struct thread *my_thread = malloc(sizeof(*my_thread));
// ...
pthread_setspecific(struct_thread_key, my_thread);

稍后访问当前主题:

struct thread *my_thread = (struct thread *) pthread_getspecific(struct_thread_key);