gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:51:08 28 4
gpt4 key购买 nike

在下面的代码中,我调用 pthread_join() 并将线程 ID 设为 self。结果是它返回错误号 35。同样,我试图用 perror 打印。但它正在显示“成功”。我的疑问是库/系统调用是否需要为任何错误明确设置 errno 或者我是否遗漏了什么?

#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 .....

最佳答案

不要求这些函数设置 errno 或不理会它。你总是可以自由地做:

errno = pthread_join(t, &res);

关于c - pthreads 函数是否在内部设置了 errno?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790535/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com