【发布时间】:2021-04-06 15:58:45
【问题描述】:
我想为 3 个线程打印 1 到 10。我的代码能够做到这一点,但之后程序卡住了。我尝试在函数末尾使用 pthread_exit 。另外,我尝试在 main 中删除 while (1) 并在那里使用 pthread join。但是,我得到了同样的结果。我应该如何终止线程?
enter code here
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
int done = 1;
//Thread function
void *foo()
{
for (int i = 0; i < 10; i++)
{
printf(" \n @@@@@@@@@@@@@");
pthread_mutex_lock(&lock);
if(done == 1)
{
done = 2;
printf (" \n %d", i);
pthread_cond_signal(&cond2);
pthread_cond_wait(&cond1, &lock);
printf (" \n Thread 1 woke up");
}
else if(done == 2)
{
printf (" \n %d", i);
done = 3;
pthread_cond_signal(&cond3);
pthread_cond_wait(&cond2, &lock);
printf (" \n Thread 2 woke up");
}
else
{
printf (" \n %d", i);
done = 1;
pthread_cond_signal(&cond1);
pthread_cond_wait(&cond3, &lock);
printf (" \n Thread 3 woke up");
}
pthread_mutex_unlock(&lock);
}
pthread_exit(NULL);
return NULL;
}
int main(void)
{
pthread_t tid1, tid2, tid3;
pthread_create(&tid1, NULL, foo, NULL);
pthread_create(&tid2, NULL, foo, NULL);
pthread_create(&tid3, NULL, foo, NULL);
while(1);
printf ("\n $$$$$$$$$$$$$$$$$$$$$$$$$$$");
return 0;
}
【问题讨论】:
-
能否请您统一格式化您的代码?此外,这可能是用 C 或 C++ 编译的,所以添加相应的语言标签。此外,这应该是一个minimal reproducible example,所以如果可能的话,将它从三个减少到更少的额外线程。作为这里的新用户,也请带上tour并阅读How to Ask。
-
谢谢!!!我会记住这一点的!
-
你仍然可以edit你的问题!