多线程交替输出abcd信号版本

多线程交替输出abcd,通过互斥量及信号控制。

示例:abcd_cond.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>

#define THNUM 4
static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; //互斥量
static pthread_cond_t cood = PTHREAD_COND_INITIALIZER; //信号量
static int num;

static void *pth_func(void *p)  //线程调用函数
{
  int i = (int)p;
  char chr = 'a'+i; //输出字符

  while(1)
  {
    pthread_mutex_lock(&mut);  //加锁
    while(num != i)
      pthread_cond_wait(&cood,&mut); //解锁等待信号

    num = (num+1)%THNUM;
    write(1,&chr,1);
    pthread_cond_broadcast(&cood);  //处理完成后发送信号(广播模式)
    pthread_mutex_unlock(&mut);  //解锁
  }

  pthread_exit(NULL); //退出线程(实际退出不了)
}

int main()
{
  int i,err;
  pthread_t tid[THNUM];

  for(i=0;i<THNUM;i++)
  {
    err = pthread_create(tid+i,NULL,pth_func,(void *)i); //创建线程
    if(err)
    {
      fprintf(stderr,"pthread_create():%s\n",strerror(err));
      exit(1);
    }
  }

  alarm(5);  //定时5s退出

  for(i=0;i<THNUM;i++)
  {
    pthread_join(tid[i],NULL); //等待线程结束
  }

  pthread_mutex_destroy(&mut);  //销毁锁
  pthread_cond_destroy(&cood);  //销毁信号

  exit(0);
}

编译文件:Makefile

CFLAGS +=-pthread
LDFLAGS +=-pthread

 

posted @ 2022-07-26 09:14  *^VV^*  阅读(46)  评论(0编辑  收藏  举报