Crianca * criarCrianca(int numeroCrianca) { int lado = rand() % NUMERO_LADOS_NA_PONTE; int numeroTravessias = 1 + rand() % LIMITE_DO_NUMERO_TRAVESSIAS; Crianca *crianca = crianca_create(numeroCrianca, lado, numeroTravessias); return crianca; }
void entrarNaPonte(Ponte *ponte_shared_memory, int segment_id) { //printf ( "\nSegment_ID da Ponte: %d\n", segment_id ); //printf("\n *****Endereco da Ponte: %p\n", ponte_shared_memory ); //printf(" *****Valor semaforoEsquerda: %d\n", semaforoBidimensional_semaforoEsquerda_getValue(ponte_shared_memory->semaforo)); //printf(" *****Valor semaforoDireita: %d\n", semaforoBidimensional_semaforoDireita_getValue(ponte_shared_memory->semaforo)); //printf(" *****Valor semaforoMediador: %d\n", semaforoBidimensional_semaforoMediador_getValue(ponte_shared_memory->semaforo)); //srand(time(NULL)); int lado = rand() % 2; //srand(time(NULL)); int numeroTravessias = 1 + rand() % 4; int tempoDecisao = 0; Crianca *crianca = crianca_create(getpid(), tempoDecisao, lado, numeroTravessias); printf("\nCrianca: %d; Lado: %d; Numero de Travessias = %d\n", getpid(), lado, numeroTravessias); while(crianca->numeroTravessias > 0) { crianca->tempoDecisao = rand() % 1000; printf("\nCrianca: %d; Tempo de Decisao: %d\n", getpid(), crianca->tempoDecisao); usleep(crianca->tempoDecisao); if(crianca->lado == ESQUERDA) { //printf("\nCrianca: %d TENTANDO ATRAVESSAR a ponte da Esquerda para Direita\n", getpid()); ponte_atravessar_esquerdaParaDireita(ponte_shared_memory, crianca, 70); crianca->lado = DIREITA; }else{ //printf("\nCrianca: %d TENTANDO ATRAVESSAR a ponte da Direita para Esquerda\n", getpid()); ponte_atravessar_direitaParaEsquerda(ponte_shared_memory, crianca, 70); crianca->lado = ESQUERDA; } crianca->numeroTravessias--; } }