这就是我想知道的:
如果我使用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());
}
答案 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匹配。如果它们不同,则存在问题。