pthread_join 参数类型错误

pthread_join wrong type of argument

我一直在尝试创建一个从标准输入读取并将输入存储到链表的简单线程。创建和加入线程时出现以下错误:

warning: passing argument 1 of ‘pthread_join’ makes integer from pointer without a cast [-Wint-conversion]
   pthread_join(prod_thread, NULL);

我正在将 thread_t* 参数传递给 pthread_join,但它似乎需要一个 int,这让我感到困惑。谁能解释为什么会这样?这是代码:

pair_t* head = malloc(sizeof(pair_t));
pthread_t* prod_thread = malloc(sizeof(pthread_t));
pthread_create(prod_thread, NULL, prod_func, head);
pthread_join(prod_thread, NULL);

prod_func 函数如下所示:

void* prod_func(void* head) {
  ...
}

我也试过调用 pthread_join(&prod_thread, NULL); 但我得到了同样的错误。

I'm passing a thread_t* argument to pthread_join but it seems that it expects an int which confuses me.

pthread_join 期望它的第一个参数是 pthread_t(而不是 pthread_t *)。 pthread_t 的确切类型因实现而异,但在您的实现中它是整数类型。您传递的是一个指针。

I've also tried calling pthread_join(&prod_thread, NULL); but then I get the same error.

当然可以。如果 prod_thread 的类型为 pthread_t *,则其地址 &prod_thread 的类型为 pthread_t **。这是错误的方向(结果仍然是一个指针)。当你写下你的声明时,你真正想要的是

pthread_join(*prod_thread, NULL);