理发店问题模拟






1.29/5 (9投票s)
理发店问题模拟
引言
本文模拟了理发店场景,未使用多线程。 以下是该场景的简要概述
理发店由一个有“n”把椅子的等候室和一个理发室组成
只有一个理发椅,
1. 如果没有顾客需要服务,理发师就会睡觉。
2. 如果顾客进入理发店,并且所有椅子都被占用
那么顾客离开商店。
3. 如果理发师很忙,但有空椅子,那么顾客会坐在其中一把
空椅子上。
4. 如果理发师睡着了,顾客会叫醒理发师。
背景
您应该具备基本的 C++ 技能才能理解代码。 此模拟使用计数器方法而不是计时器。
使用代码
下面显示的是 CBarberShop 类,其中包含各种成员变量和方法。
成员变量的描述
m_NoWaitingChairs:此变量始终包含给定时间可用的候诊椅的数量。
m_NoCustomers:此变量始终包含给定时间等待的顾客人数。
MAX_CHAIRS:此 const 变量固定为 5,这意味着商店可用的候诊座位数量。
m_BarberStatus:如果理发师忙于理发,则此布尔值设置为 true。 如果他空闲,则该值设置为 false。
IsRandEven:此变量用于触发新客户的到来。 如果生成的随机数为偶数(表示有新客户到达),则此变量设置为 true;如果生成的随机数为奇数(没有新客户),则此变量设置为 false。
成员函数的描述
CBarberShip():构造函数,用于初始化成员变量。
bool Barber_Status():返回理发师状态。 如果理发师很忙,则为 true。 如果他空闲,则为 false。
void Wakeup():此函数由新客户调用,以唤醒正在睡觉的理发师。
void Check_For_New_Customer():这是程序的核心,它不断寻找新客户。 背后的逻辑是:我正在生成随机数。 如果该数字是偶数,则会触发新客户到达。 如果该数字是奇数,则没有新客户。
void HairCut():当理发师理发时,调用此函数。
void Ger_Customer_Seat_Status():此函数告诉您给定时间可用的候诊座位数量和等待的顾客人数。
void set_barber_status(): 此函数根据理发师的状态将理发师状态设置为 true 或 false。
bool IsEven(int):如果传递给它的数字是偶数,则返回 true,否则返回 false。
class CBarberShop { private: int m_NoWaitingChairs,m_NoCustomers; const int MAX_CHAIRS; bool m_BarberStatus,IsRandEven; public: CBarberShop():MAX_CHAIRS(5) //Constructor initializing variables { m_NoWaitingChairs=5; m_NoCustomers=0; m_BarberStatus=false; } bool Barber_Status() //returns the barber's status. true=busy; false=free; { } void Wakeup() // if the barber is sleeping customer wakes him up { } //constantly checks for new customer arriaval. If the random number is even, it triggers // new customer arrival. if random number is odd, no trigger. void Check_For_New_Customer() { } //while barber doing haircut. decrease no.of customers and increase waiting chairs. void Haircut() { } //gets the current customer and seats info void Get_Customer_Seat_Status() { } // sets the barber status to true or false depending on the customers. void Set_Barber_Status(bool status) { } //returns no.of customers at any time int No_Customers() { } //retuns no. of waiting chairs availalbe at any time int No_WaitChairs_Available() { } bool IsEven(int x) { } };
以下是此程序的工作原理的描述
如果 HairCut 静态变量的值达到 5,则认为理发师已完成理发。
它在 while 循环中递增。 这取代了计时器方法。 而不是分配
一些用于理发的计时器,我正在为其分配一个计数器。 如果计数器达到值 5,则表示已完成理发。
而新客户到达的逻辑是,我总是生成一个随机数。
如果随机数为偶数,则表示有新客户到达。 如果为奇数,则没有新客户到达。