#include #include #include #include sem_t *sem; //kada bi se semafor koristio za dretve istog procesa //tada bi mogli i samo: // sem_t sem; //te svugdje umjesto "sem" staviti "&sem", //a u 'main'-u ne bi trebali zauzimati zajednicku memoriju void p(int n) { int i; for (i = 1; i <= 3; i++) { sem_wait(sem); printf("p%d u KO (%d)\n", n, i); sleep(1); printf("p%d u NKO (%d)\n", n, i); sem_post(sem); sleep(1); } exit(0); } int main() { int id = shmget(IPC_PRIVATE, sizeof(sem_t), 0600); sem = shmat(id, NULL, 0); sem_init(sem, 1, 1); if (!fork()) p(1); if (!fork()) p(2); wait(NULL); wait(NULL); sem_destroy(sem); shmctl(id, IPC_RMID, NULL); return 0; }