#include #include #include #include #include // The maximum number of customer threads. #define MAX_CUSTOMERS 25 // Function prototypes... void *customer(void *num); void *barber(void *); void randwait(int secs); // Define the semaphores. // waitingRoom Limits the # of customers allowed // to enter the waiting room at one time. sem_t waitingRoom; // barberChair ensures mutually exclusive access to // the barber chair. sem_t barberChair; // barberPillow is used to allow the barber to sleep // until a customer arrives. sem_t barberPillow; // seatBelt is used to make the customer to wait until // the barber is done cutting his/her hair. sem_t seatBelt; // Flag to stop the barber thread when all customers // have been serviced. int allDone = 0; int main(int argc, char *argv[]) { pthread_t btid; pthread_t tid[MAX_CUSTOMERS]; long RandSeed; int i, numCustomers, numChairs; int Number[MAX_CUSTOMERS]; // Check to make sure there are the right number of // command line arguments. if (argc != 4) { printf("Use: SleepBarber \n"); exit(-1); } // Get the command line arguments and convert them // into integers. numCustomers = atoi(argv[1]); numChairs = atoi(argv[2]); RandSeed = atol(argv[3]); // Make sure the number of threads is less than the number of // customers we can support. if (numCustomers > MAX_CUSTOMERS) { printf("The maximum number of Customers is %d.\n", MAX_CUSTOMERS); exit(-1); } printf("\nSleepBarber.c\n\n"); printf("A solution to the sleeping barber problem using semaphores.\n"); // Initialize the random number generator with a new seed. srand48(RandSeed); // Initialize the numbers array. for (i=0; i