void proceso(int i, int pid) { int k; int lwait; int lsignal; for(k=0;k<CICLOS;k++) { lwait=1; //printf("omaiga %s, g=%d, l=%d\n", pais[i], *gwait, lwait); fflush(stdout); do { atomic_xchg(lwait,*gwait); } while(lwait!=0); // comprobacion del semaforo waitsem(sem, pid); *gwait = 0; // <zona critica> printf("Entra %s",pais[i]); fflush(stdout); //sleep(5/*rand()%3*/); printf("- %s Sale\n",pais[i]); fflush(stdout); // </zona critica> lsignal=1; do { atomic_xchg(lsignal,*gsig); } while(lsignal!=0); // Llamada waitsignal signalsem(sem, pid); *gsig = 0; // Espera aleatoria fuera de la sección crítica sleep(rand()%3); } exit(0); // Termina el proceso }
void proceso(int i) { int k; for(k=0;k<CICLOS;k++) { waitsem(mySem); printf("Entra %s %i°",pais[i], k+1); fflush(stdout); sleep(rand()%3 + BASETIME); printf(" - %s Sale\n",pais[i]); signalsem(mySem); // Espera aleatoria fuera de la sección crítica sleep(rand()%3 + BASETIME); } exit(0); // Termina el proceso }