理发师问题代码

更新时间:2023-12-05 03:16:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include #include #include #include

#define MAX 6 //最大椅子的数量

sem_t barber; sem_t customer;

sem_t mutex; //互斥信号量

int count = 0; //计数:等待理发的顾客数 int chairs = MAX;

void *Barber(void *arg){ while(count>-1){ printf(\理发师等待顾客...\\n\ sem_wait(&customer); //等待顾客 printf(\理发师:正在理发中...\\n\ sem_wait(&mutex); //理发结束 count--; chairs++; printf(\理发师理完了,此时正在等待的顾客数为:%d\\n\ sem_post(&barber); sem_post(&mutex); printf(\欢迎下次光临!\\n\ } }

void *Customer(void *arg){ sem_wait(&mutex); printf(\请顾客%d坐\\n\ if(chairs > 0){ //如果当前有空余座位 count++; //顾客数量+1 chairs--; //占用一个座位 printf(\正在等待的顾客为%d,请理发师加油!\\n\ sem_post(&customer); //等待理发,唤醒理发师 sem_post(&mutex); //允许其他顾客进门 sem_wait(&barber); //当理发师空闲时开始理发 }else { //没有空余座位,准备离开 sem_post(&mutex); //离开时释放mutex,允许其他进程访问 printf(\没有座位了,不好意思!\\n\ } sleep(1); }

int main(int argc,char *argv[]){ sem_init(&barber,0,1); sem_init(&customer,0,0); sem_init(&mutex,0,1); pthread_t p,c; int flag = 1;

flag = pthread_create(&p,NULL,Barber,NULL); if(flag == 0){ printf(\这个理发店有一个理发师!\\n\ flag = 1; } pthread_t d[9]; int i = 0; for(;i<8;i++){ flag = pthread_create(&d[i],NULL,Customer,i); }

return 0; }

本文来源:https://www.bwwdw.com/article/0nat.html

Top