gpt4 book ai didi

c++ - pthread 和 pthread_join 函数的行为

转载 作者:行者123 更新时间:2023-11-30 03:09:48 28 4
gpt4 key购买 nike

我是多线程编程的新手,对 pthreads 有疑问。

这是我运行的测试代码,我不理解它的行为。有人可以解释一下吗。

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() 线程的情况特别感兴趣。

谢谢,和平号

最佳答案

恐怕我无法重现您的问题。

我跑了:

#include <pthread.h>
#include <stdio.h>

void *t1(void *args){
printf("returning from t1\n");
return NULL;
}

void *t2(void *args){
printf("returning from t2\n");
return NULL;
}

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;
}

作为:

while (true) ; do ./ptest ; date ; done

并发现:t1,t2; t2、t1 和 t1。

但绝不会重复输入,或遗漏 t1。

对不起。

也许您的线程库中有问题,或者从线程进程中打印出来?

关于c++ - pthread 和 pthread_join 函数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824150/

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