Simulação threads - barbeiro

262 palavras 2 páginas
#include
#include
#include
#include

#define SEG 1000000

struct lista { int num_cliente; struct lista* proximo;
};

struct lista* plista; struct lista* ponteiro;

int num_espera;

struct thread_parms
{
int num_barbeiro;
};

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

sem_t semaforo;

void* thread_function(void *args){ int barbeiro;

while(1){ struct lista* proximo_cliente;

sem_wait(&semaforo);

pthread_mutex_lock (&mutex); num_espera--; proximo_cliente = plista; plista = plista->proximo; struct thread_parms* p = (struct thread_parms*) args; barbeiro = p->num_barbeiro;

pthread_mutex_unlock (&mutex);

printf("Barbeiro %d cortando o cabelo do cliente %d.\n", barbeiro, proximo_cliente->num_cliente); usleep(10*1000000);

free(proximo_cliente); } return NULL;
}

void inicializa(){ plista = NULL; sem_init(&semaforo, 0, 0);
}

void add_cliente(int num_cliente, int num_cadeiras_espera){

if (num_espera == num_cadeiras_espera ) printf("Cliente %d foi embora.\n", num_cliente); else{ num_espera++; struct lista* novo_cliente; novo_cliente = (struct lista*) malloc (sizeof (struct lista));

pthread_mutex_lock (&mutex); novo_cliente->num_cliente = num_cliente;

if(plista != NULL){ ponteiro = plista; while(ponteiro->proximo != NULL) ponteiro = ponteiro->proximo; ponteiro->proximo = novo_cliente; } else{ novo_cliente->proximo = plista; plista = novo_cliente; }

sem_post (&semaforo); pthread_mutex_unlock (&mutex); }
}

void chega_cliente(int *cont_cliente, int num_cadeiras_espera){ printf("Chegou o cliente %d.\n",*cont_cliente); add_cliente(*cont_cliente, num_cadeiras_espera); *cont_cliente = *cont_cliente + 1;
}

int main(int argc, char* argv[]){

int num_barbeiros = atoi(argv[1]); int num_cadeiras_espera = atoi(argv[2]); int tempo_barbeiro = atoi(argv[3]); int tempo_cliente =

Relacionados

  • Sistemas Operacionais
    1558 palavras | 7 páginas
  • Tp so
    2251 palavras | 10 páginas
  • 12 perguntas sistemas operacionais
    17587 palavras | 71 páginas
  • Estudo de sistemas operacionais
    48693 palavras | 195 páginas
  • PDF OCR Silberschatz - Sistemas Operacionais
    89830 palavras | 360 páginas
  • Sistemas operacionais(conceitos e aplicações) - a.silberschatz, p.galvin
    113184 palavras | 453 páginas
  • Notas E Apontamentos SO
    40412 palavras | 162 páginas
  • sistemas operacionais
    72668 palavras | 291 páginas
  • SISTEMA OPERACIONAIS
    72583 palavras | 291 páginas
  • sazff
    15000 palavras | 60 páginas