#include"define.h" /*struct semun { int val; struct semid_ds *buff; ushort *array; }; */ void sem_create() { int semid; semid=semget(KEY_SEM,1,IPC_CREAT|IPC_EXCL|0666); if (semid<0) printf("Nu pot creea setul de semafoare!\n"); } void sem_destroy() { int semid,sterg; semid=semget(KEY_SEM,0,0); if (semid<0) printf("Nu pot accesa setul de semafoare pentru stergere!\n"); sterg=semctl(semid,0,IPC_RMID,0); if (sterg<0) printf("Nu pot sterge setul de semafoare!\n"); } void Initsem(int val) {//seteaza valoarea semaforului la val; int semid; /*union semun arg; arg.val=val;*/ semid=semget(KEY_SEM,0,0); semctl(semid,0,SETVAL,val); } void DecrementeazaSem() {//decrementeaza valoarea semaforului int semid; struct sembuf oper; semid=semget(KEY_SEM,0,0); oper.sem_num=0; oper.sem_op=-1; oper.sem_flg=0; semop(semid,&oper,1); } void Astept_0() {//asteapta pana cand sem_val ia valoarea 0 int semid; struct sembuf oper; semid=semget(KEY_SEM,0,0); oper.sem_num=0; oper.sem_op=0; oper.sem_flg=0; semop(semid,&oper,1); }