Introduction
This article simulates the Barber shop scenario with out using multithreading. Below is the breif outline of the scenario:
Barber shop consists of a waiting room with 'n' chairs, and a barber room
with one barber chair,
1. if there are no customers to be served the barber goes to sleep.
2. If a customer enters the barber shop and all the chairs are occupied
then customer leaves shop.
3. If barber is busy but chairs are available then customer sits in one of the
free chairs.
4. If barber is asleep the customer wakes up barber.
Background
One should need to have basic C++ skills to understand the code. This simulation uses counter method instead of timer.
Using the code
Shown belows is the CBarberShop class which contains various member variables and methods.
Description of the member variables:
m_NoWaitingChairs: this variables always contains the no. of waiting chairs available at a given time.
m_NoCustomers: this variables always contains the no. of customers waiting at a given time.
MAX_CHAIRS: This const variable is fixed to 5 which means the available no. of waiting seats the shop.
m_BarberStatus: this boolen value is set true if the barber is busy cutting hair. If he is free the value is set to false.
IsRandEven: This variable is used in triggering new customer arrival. This variable is set to true if the random no. generated is even(means new customer arrived) or to false if the random no. generated is odd(no new customer).
Description of the member functions:
CBarberShip(): Constructor to initialize the member variables.
bool Barber_Status(): returns the barber status. true if the barber is busy. false if he is free.
void Wakeup(): This function is invoked by new customer to wakeup the barber who is sleeping.
void Check_For_New_Customer(): This is the heart of the program, which keeps on finding for new customer. The logic behind is: I am generating random numbers. If the number is even then it triggers a new customer is arrived. If the number is odd, no new customer.
void HairCut(): While the barber is cutting hair, this function is invoked.
void Ger_Customer_Seat_Status(): this function tells the available no.of waiting seats and the customers waiting at a given time.
void set_barber_status(): this function sets the barber status to true or false depending upon his status.
bool IsEven(int): returns the true if the no. passed to it is even else false.
class CBarberShop
{
private:
int m_NoWaitingChairs,m_NoCustomers;
const int MAX_CHAIRS;
bool m_BarberStatus,IsRandEven;
public:
CBarberShop():MAX_CHAIRS(5)
{
m_NoWaitingChairs=5;
m_NoCustomers=0;
m_BarberStatus=false;
}
bool Barber_Status()
{
}
void Wakeup()
{
}
void Check_For_New_Customer()
{
}
void Haircut()
{
}
void Get_Customer_Seat_Status()
{
}
void Set_Barber_Status(bool status)
{
}
int No_Customers()
{
}
int No_WaitChairs_Available()
{
}
bool IsEven(int x)
{
}
};
Here is the description of how this program works:
Barber is said to be done hair cut if the HairCut static variable reaches the value 5.
It is been incremented in the while loop. This replaces the timer method. Instead of allocating
some timer for haircut, I am allocating a counter for it. If the counter reaches the value 5, haircut is said to be done.
And the logic behind the new customer arrival is, I always generate a random number.
If the random no. is even, it means new customer is arrived. if odd, no new customer is arrived.