int main( int argc, char *argv[] ) { if ( (argc-1) % 2 != 0 ) { println("Malformed flags."); return EXIT_FAILURE; } else { // overwrite defaults int i; char flag[ SMALL_BUFFER ]; for ( i = 1; i < argc; i++ ) { strcpy( flag, argv[ i ] ); if ( strEqual(flag, "-s") ) service_time = atoi( argv[ ++i ] ); else if ( strEqual(flag, "-b") ) break_time = atoi( argv[ ++i ] ); else if ( strEqual(flag, "-h") ) shared_id = atoi( argv[ ++i ] ); } } shared = attachSharedMem( shared_id ); initSems(); int i = 0; do { p_sem_wait( &shared->client_present ); if ( !clientsPresent() ) { println( "No clients present. Cashier taking break." ); sleep( break_time ); } else { signalClient(); serviceClient(); } i++; } while ( i < MAX_NUM_CLIENTS ); log( "A cashier detaching from shared memory." ); detachSharedMem( shared ); return 0; }
/**************************************************** * Description: initializes all semaphores with use * of the helper function initSems() * * Return: nothing ***************************************************/ void initAllSems() { int i; initSems(&theaterOpen, 0); initSems(&createdAgent, 0); initSems(&createdTaker, 0); initSems(&ticketOrdered, 0); initSems(&aMutex, 1); initSems(&tMutex, 1); initSems(&sMutex, 1); initSems(&agentCoord, 2); initSems(&fOrderReady, 0); initSems(&ticketReady, 0); for (i = 0; i < MAX_CUSTOMERS; i++) { initSems(&orderTaken[i], 0); } for (i = 0; i < MAX_CUSTOMERS; i++) { initSems(&toreTicket[i], 0); } for (i = 0; i < MAX_CUSTOMERS; i++) { initSems(&boughtTicket[i], 0); } }