Barbeiro Sonolento em C com pthread
514 palavras
3 páginas
/** * ATENCAO! Para construir/compilar, use o comando: * gcc -Wall -pthread -o "%e" "%f" -D_GNU_SOURCE * * * Author: Tiago Silva Araujo, Diego Cunha * * ** Barbeiro Sonolento ** */#include
#include
#include
#include
#include
#include
#include
#define NUM_CADEIRAS 5 // número de cadeiras para os clientes à espera
sem_t clientes; // número de cliente à espera de atendimento sem_t barbeiros; // número de barbeiros à espera de clientes sem_t mutex; // para exclusão mútua
int clis_esperando = 0; // clientes que estão esperando (não estão cortando)
/*
* Procedimentos:
* void abrirBarbearia()
* void dormir()
* void clienteChega(int idCliente)
* void barbeiroIniciaCorte()
* void clienteDesiste(int idCliente)
* void clienteSaiSatisfeito(int idCliente)
* void clienteCortou(int idCliente)
*
* Função:
* pid_t gettid(void)
*/
void abrirBarbearia(){ printf("\n\nBarbeiro sonolento está abrindo a barbearia...\n\n\n"); sleep(3);
}
void dormir(){ printf("\n\n\nBarbeiro dormindo: zzzZZZZzzzzZZ ZZZ ZZZZZ ZzzzzzzzZZZZ\n\n\n"); sleep(3);
}
void clienteChega(int idCliente) { printf("Entrou o cliente de número %d. Ele encontrou %d clientes esperando\n",idCliente, clis_esperando); } void barbeiroIniciaCorte() { printf("\nBarbeiro inicia corte.\n");
}
void clienteDesiste(int idCliente) { printf("\nCliente %d sai aborrecido. barbearia cheia.\n", idCliente);
}
void clienteSaiSatisfeito(int idCliente){ printf("\nCliente %d vai embora satisfeito.\n", idCliente);
}
void clienteCortou(int idCliente){ printf("\nCliente %d teve o cabelo cortado", idCliente);
}
/* Buscando o id do processo. referência usada: How to obtain unique thread identifier on Linux - Alex on Linux */ pid_t gettid(void){ return syscall( __NR_gettid );
}
void* barbeiro(void *arg) {