The Sleeping-Barber Problem:

A barbershop consists of a waiting room with n > 0 chairs and the barber room containing the barber chair.

If there are no customers to be served, then the barber sleeps.

If a customer enters the barbershop and all chairs are occupied, then the customer leaves the shop.

If the barber is busy but chairs are available, then the customer sits in one of the free chairs.

If the barber is asleep, then the customer wakes up the barber and the shaving process begins.

After they finish, the customer leaves and the barber start shaving another customer, if there are any in the waiting room. Otherwise he goes to sleep.

Respuesta :

Answer:

Explanation:

Following are the Semaphores:

Customers: Counts waiting customers;

Barbers: Number of idle barbers (0 or 1)

mutex: Used for mutual exclusion.

Cutting: Ensures that the barber won’t cut another customer’s hair before the previous customer leaves

Shared data variable:

count_cust: Counts waiting customers. ------------copy of customers. As value of semaphores can’t access directly.

// shared data

semaphore customers = 0; semaphore barbers = 0; semaphore cutting = 0; semaphore mutex = 1;

int count_cust= 0;

void barber() {

while(true) { //shop is always open

wait(customers); //sleep when there are no waiting customers

wait(mutex); //mutex for accessing customers1

count_cust= count_cust-1; //customer left

signal(barbers);

signal(mutex);

cut_hair();

}

}

void customer() {

wait(mutex); //mutex for accessing count_cust

if (count_cust< n) {

count_cust= count_cust+1; //new customer

signal(customers); signal(mutex);

wait(barbers); //wait for available barbers get_haircut();

}

else { //do nothing (leave) when all chairs are used. signal(mutex);

}

}

cut_hair(){ waiting(cutting);

}

get_haircut(){

get hair cut for some time; signal(cutting);

}