多线程交替输出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