C:是pthread_self()和pthread_t变量一样吗?

时间:2013-10-30 03:38:56

标签: c pthreads

这就是我想知道的:

如果我使用pthread_create()创建一个线程,然后从该线程调用pthread_self(),那么该值是否与我在主线程中传递给pthread_create的pthread_t值匹配?

//pthread_t variable
pthread_t producer_thread = (pthread_t*)malloc(sizeof(pthread_t));;

//create the thread
pthread_create(producer_thread, NULL, producer, NULL);

printf("Pthread_t variable after creating thread says %d\n", producer_thread);

....

//function passed to thread
void producer(void *p){
  printf("Pthread self says: %d\n", pthread_self());
}

1 个答案:

答案 0 :(得分:1)

pthread_self的返回类型是pthread_t,它基本上是一个不是整数类型的指针。

因此,它正在打印其地址(typecasted为int),而不是pthread_t结构。

您可以使用pthread_equal函数检查这些pthread_t是否相同。在另一个线程中,使用

 printf("%d\n", pthread_equal(mythreadId, pthread_self()));

它应该打印一个非零数字,表示它们对应于同一个线程。

如果它们不相同,那么这是一个问题。

在生成的线程中打印mythreadId。它必须与主要的pthread_t匹配。如果它们不同,则存在问题。