#include #include #include #include #include #include #include #include #include #define MAX_CLIENTES 2 #define TIEMPO_ESPERA 100 #define PINHA 5 #define CAS 4 /*Memoria compartida, entre otros*/ bool barAbierto; bool guaro; int barra[6]; sem_t semMesero; /*DECLARACION DE MUTEX*/ static pthread_mutex_t bebidas[6]; pthread_mutex_t hayPaco = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t consola = PTHREAD_MUTEX_INITIALIZER; std::string nombre_bebidas[] = {"whisky","anís","ginebra","conhac","cas","piña"}; /*Declaración adelantada de métodos*/ void *cliente (void*); void *policia (void*); int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); barAbierto = true; guaro = true; sem_init(&semMesero, 0, 2); //Cuado es negativo se bloquea, xq no se puede aumentar más. /*Se inicializa la barra en -1 para indicar que los meseros están disponibles.*/ for(int i =0; i<6; barra[i]=-1,i++); for(int i=0; i<6; i++){ pthread_mutex_init(&bebidas[i], NULL); } srand (time(NULL)); int numClientes = 0; pthread_t oficial; pthread_t *clientes; clientes = new pthread_t[MAX_CLIENTES]; pthread_create(&oficial, NULL, &policia, NULL); /*En este ciclo se crean los clientes*/ while(numClientes!=MAX_CLIENTES){ if(rand()%3 == 0){ pthread_create(&clientes[numClientes], NULL, &cliente, (void *)(intptr_t)numClientes); numClientes++; } } /*Eliminar a los clientes.*/ for(int i=0; i