示例#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
}
示例#2
0
int main()
{
	int semid,shmid;
	char *shmaddr=NULL;

	if((shmid=createshm(".",'m',SHM_SIZE))==-1)
	{
		exit(1);
	}

	if((shmaddr=shmat(shmid,(char*)0,0))==(char *)-1)
	{
		perror("attach shared memory error\n");
		exit(1);
	}

	if((semid=opensem(".",'s'))==-1)
	{
		exit(1);
	}

	while(1)
	{
                waitsem(semid,0);
		p(semid,0);
		printf("reader:");
		printf("%s\n",shmaddr);
		my_sleep(5);
		v(semid,0);
	//	my_sleep(5);
	}
	
}
示例#3
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
}