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) {

Relacionados