X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/2d0aa03246e924c53fb2e5c3a3af3dcaa3a7eab5..89195ca63ae56eeb2463b061ab32f5c7acbb71f9:/practicas/practica2/P02e1201.cpp diff --git a/practicas/practica2/P02e1201.cpp b/practicas/practica2/P02e1201.cpp index b53feaa..c730202 100644 --- a/practicas/practica2/P02e1201.cpp +++ b/practicas/practica2/P02e1201.cpp @@ -62,29 +62,31 @@ int main(int argc, char *argv[]) int proc = atoi(argv[1]); // Shared memory - 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) { cerr << "Error al attachear shared memory.\n"; return 3; } - cout << "Shared memory id = " << shm_id << "\n"; // Semaforo - int sem_id = semget(SEM_KEY, 1, 0666 | IPC_CREAT); - if (sem_id == -1) + int sem_id; + do { - cerr << "Error al crea/obtener semaforo.\n"; - return 4; + sem_id = semget(SEM_KEY, 1, + (proc ? 0 : IPC_CREAT) | 0666); // crea solo si es el proceso 0 } + while (proc != 0 && sem_id == -1); + // Si es el primero, inicializo - if (!proc) + if (proc == 0) { *molinete = 0; if (semctl(sem_id, 0, SETVAL, 1) < 0) // pongo 1 en el sem @@ -94,15 +96,11 @@ int main(int argc, char *argv[]) } cout << "Semaforo inicializado id = " << sem_id << "\n"; } - else // Si soy otro espero un poco por las dudas para que corra el 1ro - { - usleep(10000); - } srand(getpid()); // Maxima cantidad de iteraciones (puede venir por parametro) - int max_iter = 100000; + int max_iter = 100; if (argc > 2) max_iter = atoi(argv[2]);