- 21
- 0
- 约4.81千字
- 约 18页
- 2017-12-10 发布于河南
- 举报
理发师问题的实现说明书
打瞌睡的理发师
理发师问题是一个利用信号量进行PV操作的经典问题。设计程序实现此问题,要使得理发师的活动与顾客的活动得到各自真实的模拟。所执行的程序应体现:理发师在没有顾客的时候去睡觉,有顾客则工作;顾客在理发师工作时坐下等待,无座时离开,直至等到理发师自己理发。
打瞌睡的理发师问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。因此此题可看作是n个生产者和1个消费者问题。顾客作为生产者,每到来一个就使计数器count增加1,以便让理发师理发(相当于消费)至最后一个顾客(相当于产品)。并且,第1个到来的顾客应负责唤醒理发师;如果不是第1个到达的顾客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器count获得)。所以可以通过一个有界缓冲区把理发师和顾客联系起来。而其中的信号也具有两种功能:一是跟踪资源的理发师和顾客的计数器;二是协调资源的理发师和顾客之间的同步器。通过对信号进行P、V操作来实现有关问题和相关描述。
数据结构:
信号量:
int Custom;//所有到达的顾客,包括正在被理发的顾 客,所以一般情况下,Custom比Wait_Person大1
int Mutex;//用于实现全局变量Wait——preson访问的互斥
int Wait_Leave;//等待离开信号量,用来表示几个顾客等待离开,只要理发师为其理发完毕,他就可以 离开了
全局变量:
int * Is_Sleeping;//当前理发师是否在睡觉
函数:
void print1(int Wait_person)
void print2(int ID)
4:Linux 提供的多线程函数:
int pthread_create(pthread_t *—thread,_const pthread_attr_t *attr,void* (*start_rtn)(void*),void *arg);
顾客模块流程图:
3、主程序流程图:
4、PV操作伪代码
int waiting=0 ; //等候理发的顾客数
int chairs=n; //为顾客准备的椅子数
semaphore customers=0, barbers=0,mutex=1;
barber()
{
while(TRUE); //理完一人,还有顾客吗?
P(cutomers); //若无顾客,理发师睡眠
P(mutex); //进程互斥
waiting -= 1;//等候顾客数少一个
V(barbers); //理发师去为一个顾客理发
V(mutex); //开放临界区
cut-hair( ); //正在理发
}
customer()
{
P(mutex); //进程互斥
if (waiting)
{
waiting += 1; // 等候顾客数加1
V(customers); //必要的话唤醒理发师
V(mutex); //开放临界区
P(barbers); //无理发师, 顾客坐着养神
get-haircut( ); //一个顾客坐下等理/
}
else V(mutex); //人满了,离开
}
三、测试结果:
代码编辑:
2、编译运行:
3、运行结果:
源代码
#include sys/mman.h
#include sys/types.h
#include linux/sem.h
#include fcntl.h
#include unistd.h
#include stdio.h
#include errno.h
#include time.h
#define N 5
#define M 20
int Custom;
int Mutex;
int Wait_Leave;
int * Is_Sleeping;
void print1(int Wait_person)
{
if(!Wait_person)
{
printf(No customer here, go to sleep.\n);
*Is_Sleeping=1;
}
}
void print2(int ID)
{
if(*Is_Sleeping)
{
printf(New customer %d comes, weak up the barber.\n,ID);
*
您可能关注的文档
最近下载
- 2025年苏州信息职业技术学院单招(语文)测试模拟试卷真题题库.docx VIP
- 常用3500汉字频率表.xls VIP
- 护理查房1例心肌梗死合并心力衰竭护理查房.pptx VIP
- 国泰怡安JB-TGZL-GK702、JB-TTZL-GK702控制器说明书.pdf
- 深度解析(2026年)《LYT 2259-2014立木生物量建模样本采集技术规程》.pptx VIP
- 厦门市2026届高三高中毕业班1月模拟测试数学试卷(含答案).pdf
- 2026 年春节节后复工复产专项方案.docx VIP
- DB62_T 5173-2025 铝灰利用与处置污染控制技术规范.pdf VIP
- 鄂尔多斯应用技术学院辅导员考试试题及答案2023.docx VIP
- 2024年专升本英语1800核心词汇.pdf VIP
原创力文档

文档评论(0)