我写了这个程序来练习pthread系统调用,所以我用了一些打印行来检查结果,但是它们被转义了,输出是:
Thread 1 created
Thread 2 created
test3
我认为应该是
thread 1 created
test2
thread 2 created
test3
test1
顺序可能会更改,但我应该有这行,为什么要转义此打印语句?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void *function();
void *function2();
int main(int argc, char *argv[])
{
pthread_t tid;
int rc;
rc = pthread_create(&tid, NULL, function(), NULL);
if(rc > 0){
fprintf(stderr, "Error\n");
exit(1);
}
pthread_join(tid, NULL);
sleep(1);
printf("test1\n");
pthread_exit(NULL);
}
void *function(){
int rc;
pthread_t tid;
printf("Thread 1 created\n");
rc = pthread_create(&tid, NULL, function2(), NULL);
if(rc > 0){
fprintf(stderr, "Error\n");
exit(1);
}
printf("test2\n");
pthread_exit(NULL);
}
void *function2(){
pthread_detach(pthread_self());
printf("Thread 2 created\n");
printf("test3\n");
pthread_exit(NULL);
}
答案 0 :(得分:3)
rc = pthread_create(&tid, NULL, function(), NULL);
您正尝试使用通过调用pthread_create()
返回的指针来调用function()
作为要在新线程中运行的函数(请记住,在调用函数本身之前先对函数参数进行评估)。现在,function()
实际上并没有返回任何值,但是它在其主体中调用了function2()
(同时评估了对另一次pthread_create()
的调用的参数), 也不返回任何值,但是不调用pthread_exit()
。由于此时只有一个线程是因为仅运行主进程线程(实际上尚未调用pthread_create()
;调用堆栈看起来像main() -> function() -> function2()
),因此整个程序退出。>
您需要使用指向pthread_create()
和function
的指针来调用function2
,而不是调用它们的结果:
rc = pthread_create(&tid, NULL, function, NULL);
等