#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
pthread_mutex_t mutex;
pthread_cond_t son_finish;
pthread_cond_t main_finish;
int flag=1;
int count =10;
void * son(void)
{
int i;
while(1)
{
pthread_mutex_trylock(&mutex);
if(flag == 1)
{
flag=0;
sleep(1);
for(i=0;i<3;i++)
{
printf("son\n");
}
pthread_cond_signal(&son_finish);
pthread_mutex_unlock(&mutex);
}
else
{
if(count > 0)
{
pthread_cond_wait(&main_finish,&mutex);
sleep(1);
for(i=0;i<3;i++)
{
printf("son\n");
}
count--;
pthread_cond_signal(&son_finish);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_cond_signal(&son_finish);
pthread_mutex_unlock(&mutex);
break;
}
}
}
return NULL;
}
int main()
{
pthread_mutex_init(&mutex,NULL);
pthread_t son_thread;
pthread_create(&son_thread,NULL,(void *)son,NULL);
while(1)
{
int i;
pthread_mutex_trylock(&mutex);
if(count >0)
{
pthread_cond_wait(&son_finish,&mutex);
sleep(1);
for(i=0;i<6;i++)
{
printf("main\n");
}
count--;
pthread_cond_signal(&main_finish);
pthread_mutex_unlock(&mutex);
}
else
{
pthread_cond_signal(&main_finish);
pthread_mutex_unlock(&mutex);
break;
}
}
return 0;
}
子线程循环 3 次,接着主线程循环 6 次,接着又回到子线程循环 3 次,接着再回到主线程又循环6 次,如此循环50次,试写出代码。
于 2022-03-10 21:57:51 首次发布