linux线程2(简单笔试题)

题目:子线程循环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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值