题目:子线程循环10此,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环4次,试写出代码。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
pthread_attr_t attr; //属性
pthread_mutex_t mutex; //互斥量
pthread_cond_t cond; //条件变量
int flag1=0,flag2=0;
void *func(void *arg)
{
int i,k=0;
while(1)
{
for(i=1;i<=10;i++)
printf("%d ",i);
printf("\n");
pthread_mutex_lock(&mutex); //锁住互斥量
flag2=1;
pthread_cond_signal(&cond); //通知线程条件已经满足,唤醒一个等待的线程
while(flag1!=1)
pthread_cond_wait(&cond,&mutex); //等待条件变量变为真
flag1=0;
pthread_mutex_unlock(&mutex); //互斥量解锁
k++;
if(k==4)
pthread_exit(NULL);
}
}
int main()
{
int i,k=0;
pthread_t pid;
pthread_mutex_init(&mutex,NULL); //互斥量初始化,默认属性
pthread_cond_init(&cond,NULL);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); //设置线程detachstate属性,以分离状态启动线程
pthread_create(&pid,&attr,func,NULL);
while(1)
{
pthread_mutex_lock(&mutex);
while(flag2!=1)
pthread_cond_wait(&cond,&mutex);
flag2=0;
for(i=0;i<100;i++)
printf("%d ",i+1);
printf("\n");
flag1=1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
k++;
if(k==4)
exit(0);
}
exit(0);
}
本文详细介绍了如何使用并发编程技术,通过子线程和主线程的交替循环实现特定任务的执行流程。具体展示了通过互斥量、条件变量等同步机制,确保线程间的正确交互与数据共享,最终实现复杂任务的高效并行处理。
&spm=1001.2101.3001.5002&articleId=48437751&d=1&t=3&u=60227ea9b5704f43902b5fa1b61e429a)
827

被折叠的 条评论
为什么被折叠?



