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

C:pthread_self()和pthread_t变量是同一个吗?,c,pthreads,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

这就是我想知道的:

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

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

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

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

 printf("%d\n", pthread_equal(mythreadId, pthread_self()));
它应该打印一个非零的数字,表明它们对应于同一个线程

如果它们不一样,那就是一个问题


在线程中打印生成的内容。它必须与main的pthread\u t匹配。如果它们不同,那么就有问题。

什么,您随后调用了同一个函数两次,并得到了不同的结果?。您应该得到一个重复的值,并且这两个值应该相互重叠,因为您没有在这两个值之间加空格,因为您正在打印
pthread\u self()
两次。“所有初始化”都在做什么?您的
mythreadId
具有未初始化的值。首先分配它。@GeorgiAngelov:发布复制您的问题()的有效代码。非常抱歉,用错误的代码提问,然后使用大写的态度注释看起来非常错误。