Example #1
0
void barber() {
  while(true) {
    sem_wait(customer_waiting);
    cut_hair();
    sem_signal(barber_sleeping);
  }
}
Example #2
0
static void *
machine(void *arg)
{
	int id;

	pthread_mutex_lock(&mut);
	id = machine_id++;
	pthread_mutex_unlock(&mut);
	printf("Peluquero %d: creado\n", id);

	while ( 1 )
	{
		int n;

		pthread_mutex_lock(&mut);
		/* Si hay algĂșn cliente esperando, despertarlo */
		while ( !(n = get_client()) )
		{
			/* Si no, a dormir */
			printf("Peluquero %d: esperando cliente\n", id);
			pthread_cond_wait(&clients_waiting, &mut);
		}
		pthread_mutex_unlock(&mut);

		/* Cortar el pelo */
		cut_hair(id, n);
	}

	return NULL;
}
Example #3
0
void barber() {
  while(true) {
    sem_wait(customer_waiting);
    sem_wait(seats_mutex);
    free_seats++;
    cut_hair();
    sem_signal(barber_sleeping);
    sem_signal(seats_mutex);
  }
}
Example #4
0
void *barber_thread(void *arg) {
    for (;;) {

        sem_wait(&customer);
        printf("%s\n", "Barber: Next customer!");
        printf("%s\n", "Barber: Good morning, sir");
        sem_post(&barber);

        cut_hair();

        sem_wait(&customer_done);
        printf("%s\n", "Barber: Very funny sir!");
        sem_post(&barber_done);
        printf("%s\n", "Barber: You're done!");
    }

}
Example #5
0
/* Thread defining Barber's behavior */
void* thread_barber (void* param)
{
    struct shop_data* shop;
    struct barber_data* barber;
    void(*cut_hair)(int min, int max);

    shop = (struct shop_data*)param;
    barber = shop->barber;
    cut_hair = sleep_within;

    while (!shop->empty) {
        printf("Barber -- sleeping\n");
        sem_wait(&barber->awake);

        printf("Barber -- cuttting hair\n");
        cut_hair(MIN_TIME, MAX_TIME);

        sem_post(&barber->done_cutting);
    }
}
main () {
pid_t child;
int i;
int nop=0;
mutexid = semget(IPC_PRIVATE, 1, SEM_MODE);
customers = semget(IPC_PRIVATE, 1, SEM_MODE);
barbers  = semget(IPC_PRIVATE, 1, SEM_MODE);
if( (mutexid == -1) || (customers == -1) || (barbers == -1))
                printf("semget error");

        initial_value.val = 1;
        if( semctl(mutexid, 0, SETVAL, initial_value) == -1)
                printf("semctl error \n");

        initial_value.val = 0;
        if( semctl(customers, 0, SETVAL, initial_value) == -1)
                printf("semctl error \n");
        
	  initial_value.val = 0;
        if( semctl(barbers, 0, SETVAL, initial_value) == -1)
                printf("semctl error \n");


if( (child = fork() ) < 0) { printf("fork error"); }
if(child){
          // child acts as producer

                for(i=1; i <= CUS_NUM; i++){
                  usleep(10000);
                  printf("A Customer has Entered the store \n");
                  down(mutexid);
                        if(waiting<waitingchairs){
                                waiting=waiting+1;
                                up(customers);
                                printf("Customer is waiting \n");
                                up(mutexid);
                                down(barbers);
                              }//endif
                        else
                           {
                            up(mutexid);
                            left=left+1;
                            printf("Customer Left the shop \n");
                           }
               } //endfor
}//end Child Process

else {
        for(i=1; i<CUS_NUM; i++) {
        down(customers);
        down(mutexid);
        waiting=waiting-1;
        up(barbers);
        up(mutexid);
        cut_hair();
     }//endwhile
                printf("Customers who left %d",left);
                if(semctl(mutexid, 0, IPC_RMID, nop) == -1)
                        printf("semctl error");

                if(semctl(customers, 0, IPC_RMID, nop) == -1)
                        printf("semctl error");

                if(semctl(barbers, 0, IPC_RMID, nop) == -1)
                        printf("semctl error");

}
return(EXIT_SUCCESS);
} //End of main