【发布时间】:2010-09-29 17:15:02
【问题描述】:
我是多线程编程的新手,有一个关于 pthread 的问题。
这是我运行的测试代码,我不明白它的行为。有人可以解释一下吗?
void *t1(void *args){
printf("returning from t1\n");
return;
}
void *t2(void *args){
printf("returning from t2\n");
return;
}
int main(){
pthread_t thread1,thread2;
int r1,r2;
r1=pthread_create(&thread1,NULL,t1,NULL);
r2=pthread_create(&thread2,NULL,t2,NULL);
pthread_join(thread1,NULL);
// pthread_join(thread2,NULL);
return 0;
}
这个程序的行为是下面显示的 5 种之一
murtuza@murtuza:FFTW$ ./ptest
returning from t2
returning from t1
murtuza@murtuza:FFTW$ ./ptest
returning from t1
returning from t2
murtuza@murtuza:FFTW$ ./ptest
returning from t1
murtuza@murtuza:FFTW$ ./ptest
returning from t2
returning from t2
murtuza@murtuza:FFTW$ ./ptest
returning from t1
returning from t2
returning from t2
我不明白第 4 和第 5 个输出。为什么线程 t2 执行两次?当然,如果我取消注释 pthread_join(&thread2,NULL,t2,NULL)
该程序将正常运行,但我对只有一个线程加入 main() 线程的情况特别感兴趣。
谢谢, 米尔
【问题讨论】:
-
我们是否遗漏了一些代码?你有 "free(a)" 并且 a 似乎没有被声明。
-
哎呀!对不起!那是一个错字。我修好了它。问题还是一样。