pthreads函数是否在内部设置了errno?

在下面的代码中,我调用pthread_join()与线程ID作为自我。 结果是,它返回错误号码35.所以我试图用perror打印。 但它显示“成功”。 我怀疑库/系统调用是否需要明确地设置错误的错误,或者我错过任何东西?

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <pthread.h> #define DEATH(mess) { perror(mess); exit(errno); } static void * threadFunc(void *arg) { void *res; printf("sleeping for 2 sec ...\n"); sleep(2); char *s = (char *) arg; pthread_t t = pthread_self(); int relval = pthread_join(t, &res); if (relval) perror("deadlock"); printf("return value is %d .....\n",relval); return (void *) strlen(s); } int main(int argc, char *argv[]) { pthread_t t1; void *res; int ret; ret = pthread_create(&t1, NULL, threadFunc, "Hello world\n"); if (ret != 0) DEATH ("pthread_create"); printf("Message from main()\n"); pthread_exit(&res); exit(EXIT_SUCCESS); 

}

 o/p Message from main() sleeping for 2 sec ... deadlock: Success return value is 35 ..... 

没有要求sr功能设置errno或他们离开它独自一人。 你总是可以自由地做:

 errno = pthread_join(t, &res); 

pthread_join()不设置errno值

请参考这里的讨论:

pthread:加入分离的线程不会正确设置errno

你最好的选择就是使用pthread_join的返回值

几件事情。

  1. 你不应该从线程本身进行连接。 连接应该从父线程完成,以清理那里的资源。
  2. errno变量是每个线程变量。 当你在线程和主线程中访问它时,它的值会有所不同。