#include #include #include #include #include int sem; void *dretva (int p) { struct sembuf op; op.sem_num = 0; op.sem_flg = 0; while (1) { printf("Dretva %d spremna\n", p); op.sem_op = -1; semop(sem, &op, 1); printf("Dretva %d unutar K.O.\n", p); usleep(1000000 * p); printf("Dretva %d izlazi iz K.O.\n", p); op.sem_op = 1; semop(sem, &op, 1); usleep(1000000); } } int main () { pthread_t thr_id; sem = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT); semctl(sem, 0, SETVAL, 1); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 1); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 2); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 3); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 4); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 5); pthread_create(&thr_id, NULL, (void *(*)(void *)) dretva, (void *) 6); usleep(50000000); //simulation time return 0; }