博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理发师问题
阅读量:6060 次
发布时间:2019-06-20

本文共 1166 字,大约阅读时间需要 3 分钟。

一个理发店有一张可以坐N人的沙发和n个理发椅和n个理发师和一个收银员。没有顾客时,理发师睡觉,当一个顾客走进理发店时,如果沙发被坐满,则离开,否则,如果所有理发师正在为其他顾客理发,便在沙发上坐下等待。如果理发师正在睡觉,顾客需将他唤醒。理发完后顾客需付费直到收银员收费才能离开;

用类C语言编写程序

int count = 0; //the number of customers sit on sofaint chair = n;bool mutex = 1; // control the countbool mutex2 = 1; //control the cashier only deal with a customerint bnum = n; // the number of resting barberint cnum = 0; // the number of the customer sit in chairs int payment = 0;int receipt = 0; void barber() {    wait(cnum);    haircut for the customer;    signal(bnum);}void customer() {    wait(mutex);    if(count >= N) { // the sofa is full         signal(mutex);        leave;    }    else {        count++;        signal(mutex);                wait(chair); // wait for the empty chairs            count--;  // leave the sofa        signal(cnum);        wait(bnum); //wait for the barber        haircut;        signal(chair);                wait(mutex2);  //wait for the cashier        signal(payment);        pay;        wait(receipt);        leave;    }}void cashier() {    wait(payment);    receive payment;    signal(receipt);    signal(mutex2);}

 

转载于:https://www.cnblogs.com/bearcarl/p/8619981.html

你可能感兴趣的文章
管家基因 | Human housekeeping genes
查看>>
【SignalR学习系列】3. SignalR实时高刷新率程序
查看>>
ASP.NET页面刷新方法总结
查看>>
poj3615
查看>>
protect,public,private 的区别
查看>>
谈谈 jQuery 中的防冲突(noConflict)机制
查看>>
判断某元素是否在Array中
查看>>
PHP 自动生成导航网址的最佳方法 v20130826
查看>>
linux系统磁盘分区之parted
查看>>
罗杰斯:做你喜欢的工作,你会变成个有钱人
查看>>
序列化(Serialization)据为JSONP远端请求
查看>>
详解ListView加载网络图片的优化,让你轻松掌握!
查看>>
./fedora_install_oracle.sh bad interpreter
查看>>
新浪微博客户端(61)-清除图片缓存
查看>>
关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决...
查看>>
CSS实现单行、多行文本溢出显示省略号(…)
查看>>
audio video 控制播放和停止
查看>>
linux 安装 swftools 报错
查看>>
关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法...
查看>>
传统媒体如何借力微信
查看>>