65.9K
CodeProject 正在变化。 阅读更多。
Home

理发店问题模拟

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.29/5 (9投票s)

2008年7月9日

CPOL

3分钟阅读

viewsIcon

37056

downloadIcon

778

理发店问题模拟

引言

本文模拟了理发店场景,未使用多线程。 以下是该场景的简要概述

理发店由一个有“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,则表示已完成理发。

而新客户到达的逻辑是,我总是生成一个随机数。
如果随机数为偶数,则表示有新客户到达。 如果为奇数,则没有新客户到达。

© . All rights reserved.