Esempio n. 1
0
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
}
Esempio n. 2
0
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
}