-2

这就是我想知道的:

如果我使用 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());
}
4

1 回答 1

1

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

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

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

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

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

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

mythreadId在线程中打印产生的内容。它必须与 main 的 pthread_t 匹配。如果它们不同,那么就有问题了。

于 2013-10-30T03:59:16.723 回答