多线程交替输出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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现