/* * Rutine de blocare folosind semafoare */ #include #include #include #define SEMKEY 123456L #define PERMS 0666 static struct sembuf op_lock[2] = { 0, 0, 0, /* asteapta ca semaforul 0 sa * devina zero */ 0, 1, 0 /* apoi incrementeaza-l cu 1 */ }; static struct sembuf op_unlock[1] = { 0, -1, IPC_NOWAIT /* Decrementeaza semaforul 0 cu * 1 (pune-l la 0) */ }; int semid = -1; /* identificatorul semaforului */ my_lock(fd) int fd; { if (semid < 0) { if ((semid = semget(SEMKEY, 1, IPC_CREAT | PERMS)) < 0) err_sys("Eroare la semget"); } if (semop(semid, &op_lock[0], 2) < 0) err_sys("Eroare la blocarea cu semop"); } my_unlock(fd) int fd; { if (semop(semid, &op_unlock[0], 1) < 0) err_sys("Eroare la deblocarea cu semop"); }