c - pthread_join() 混合线程输出

标签 c linux multithreading pthreads

我研究了 pthread_join() 我知道它运行线程直到线程处理完成,但在我的情况下它不是这样工作的,我必须使用 2 个函数创建 4 个线程,我期待输出为fun1、fun2、fun1 和 fun2,因为我按此顺序调用线程。这是我的代码,可以更清楚地描述我的问题。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread1()
{
int c=0;
while(c++ < 10)
printf("%i : Hello!!\n",c);
}
void *thread2()
{
int c=0;
while(c++ < 10)
printf("%i : How Are You!!\n",c);
}
int main( int argc, char *argv[], char *env[] )
{
pthread_t tid1,tid2,tid3,tid4;
pthread_create(&tid1,NULL,thread1,NULL);
pthread_create(&tid2,NULL,thread2,NULL);
pthread_create(&tid3,NULL,thread1,NULL);
pthread_create(&tid4,NULL,thread2,NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_join(tid4,NULL);
return 0;
}

输出每次都不同,每次都给出不同的输出,我不明白发生了什么。 输出:

1 : Hello!!
2 : Hello!!
3 : Hello!!
4 : Hello!!
5 : Hello!!
6 : Hello!!
7 : Hello!!
1 : How Are You!!
1 : How Are You!!
2 : How Are You!!
3 : How Are You!!
4 : How Are You!!
8 : Hello!!
9 : Hello!!
10 : Hello!!
2 : How Are You!!
3 : How Are You!!
4 : How Are You!!
5 : How Are You!!
6 : How Are You!!
7 : How Are You!!
8 : How Are You!!
9 : How Are You!!
10 : How Are You!!
5 : How Are You!!
6 : How Are You!!
7 : How Are You!!
8 : How Are You!!
9 : How Are You!!
10 : How Are You!!
1 : Hello!!
2 : Hello!!
3 : Hello!!
4 : Hello!!
5 : Hello!!
6 : Hello!!
7 : Hello!!
8 : Hello!!
9 : Hello!!
10 : Hello!!

我在想什么

1 : Hello!!
2 : Hello!!
3 : Hello!!
4 : Hello!!
5 : Hello!!
6 : Hello!!
7 : Hello!!
8 : Hello!!
9 : Hello!!
10 : Hello!!
1 : How Are You!!
2 : How Are You!!
3 : How Are You!!
4 : How Are You!!
5 : How Are You!!
6 : How Are You!!
7 : How Are You!!
8 : How Are You!!
9 : How Are You!!
10 : How Are You!!
1 : Hello!!
2 : Hello!!
3 : Hello!!
4 : Hello!!
5 : Hello!!
6 : Hello!!
7 : Hello!!
8 : Hello!!
9 : Hello!!
10 : Hello!!
1 : How Are You!!
2 : How Are You!!
3 : How Are You!!
4 : How Are You!!
5 : How Are You!!
6 : How Are You!!
7 : How Are You!!
8 : How Are You!!
9 : How Are You!!
10 : How Are You!!

谁能描述这里发生的事情? 谢谢!

最佳答案

我期待再次输出 fun1、fun2、fun1 和 fun2,因为我按此顺序调用线程。

线程没有顺序 - 它们独立运行。如果您希望不同的线程以任何方式同步或排序,您必须使用互斥锁、信号量、条件变量或其他一些显式同步方法自行编写代码。

在没有这种显式同步的情况下,您不能指望单独线程之间有任何特定的执行顺序。

关于c - pthread_join() 混合线程输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43004744/

相关文章:

c - 如何使用 JNI 调用从 C 返回 String 的 Java 方法?

python - 在 Python 中更新存储的信息

linux - AWK--比较两个不同文件中两个变量的值

c++ - 如何在 Linux 的 C 中使 poll() 立即退出?

python - 多RTSP接收方法

c - C 编译器如何用 C 语言编写?

c++ - 为什么 cudaMalloc() 使用指向指针的指针?

c - float 读取为 double

java - SWT:定期更新GUI

python - 在 Python 中运行长进程时为用户打印一条消息