}
int proc = atoi(argv[1]);
- int shm_id = shmget(SHM_KEY, sizeof(Molinete), IPC_CREAT | 0666);
- if (shm_id == -1)
+ int shm_id;
+ do
{
- cerr << "Error al crea/obtener shared memory.\n";
- return 2;
+ shm_id = shmget(SHM_KEY, sizeof(Molinete),
+ (proc ? 0 : IPC_CREAT) | 0666); // crea solo si es el proceso 0
}
+ while (proc != 0 && shm_id == -1);
Molinete* molinete = (Molinete*) shmat(shm_id, NULL, 0);
if (molinete == (Molinete*) -1)
{
return 3;
}
- cout << "Shared memory id = " << shm_id << "\n";
-
// Si somos el primer proceso inicializamos el molinete
- if (!proc) molinete_init(*molinete);
- else usleep(500); // espero que el 1er proceso inicialice
+ if (proc == 0) molinete_init(*molinete);
// Maxima cantidad de iteraciones (puede venir por parametro)
int max_iter = 100;