【发布时间】:2021-05-05 08:46:36
【问题描述】:
#include <stdio.h>
#include <pthread.h>
void* thread(void *v) {
printf("The thread starts now\n");
//pthread_exit(NULL);
}
int main() {
int tid1;
int retValue = 0;
pthread_create(&tid1, NULL,thread, NULL);
retValue = pthread_join(tid1, NULL);
printf("Thread ID: %d, return value: %d\n",tid1, retValue);
retValue = pthread_join(tid1, NULL);
printf("Thread ID: %d, return value: %d\n",tid1, retValue);
return 0;
}
有时输出是:
Thread ID: 1877241856, return value: 3
Thread ID: 1877241856, return value: 3
The thread starts now
Process finished with exit code 0
问题是:
-
根据定义,
pthread_join应该阻塞,等待thread完成执行,然后执行它后面的代码。但是为什么在我的代码中,thread在两个pthread_join完成之后运行? -
根据定义,
pthread_join返回0表示加入成功,但是为什么我的代码的retValue总是3,不管thread在pthread_join函数之前还是之后运行?
【问题讨论】:
-
pthread_join的返回值告诉你什么? -
来自编译器的编译器诊断消息在哪里?由于它不正确,因此在没有诊断的情况下无法编译。
-
编译器说“格式指定类型'unsigned long',但参数的类型是'int'”。这很有帮助,但我不知道我应该阅读诊断消息。谢谢@AnttiHaapala
-
@NameNull 所以,下次用
-Werror编译,它们会变成错误。也许-Wall也是...但我的意思是没有pthread_t的原始 程序,它会说与pthread_create的指针类型不兼容。
标签: c multithreading operating-system pthreads