Exemplo n.º 1
0
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;

}
Exemplo n.º 2
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);
	}
}