X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/0e1a9bc74382341f82e73bbdb66da0e8b96ffc8e..48fe71f188d0beab363ceaea597df1f09d624e67:/practicas/practica2/P02e1201.cpp diff --git a/practicas/practica2/P02e1201.cpp b/practicas/practica2/P02e1201.cpp index ea486f7..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,10 +96,6 @@ 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(1000); - } srand(getpid());