📄 sem.c
字号:
#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>union semun{ int val; struct semid_ds *buf; unsigned short *array;};int get_sem_val(int sid,int semnum){ return (semctl(sid,semnum,GETVAL,0));}void set_a_sem(int sid,int semnum,int initval){ union semun semopts; semopts.val=initval; semctl(sid,semnum,SETVAL,semopts);}void set_all_sem(int sid,unsigned short val_array[]){ union semun semopts; semopts.array=val_array; semctl(sid,0,SETALL,semopts);}int rm_sem(int sid){ return(semctl(sid,0,IPC_RMID,0));}int sem_p(int sem_id,int id){ struct sembuf sb; sb.sem_num=id; sb.sem_op=-1; sb.sem_flg=SEM_UNDO; if(semop(sem_id,&sb,1)==-1) { printf("semaphore_p failed"); return 0; } return 1;}int sem_all_p(int sem_id,int id_1,int id_2){ struct sembuf sb[2]; sb[0].sem_num=id_1; sb[0].sem_op=-1; sb[0].sem_flg=SEM_UNDO; sb[1].sem_num=id_2; sb[1].sem_op=-1; sb[1].sem_flg=SEM_UNDO; if(semop(sem_id,sb,2)==-1) { printf("semaphore_p failed"); return 0; } return 1;}int sem_v(int sem_id,int id){ struct sembuf sb; sb.sem_num=id; sb.sem_op=1; sb.sem_flg=SEM_UNDO; if(semop(sem_id,&sb,1)==-1) { printf("semaphore_p failed"); return 0; } return 1;}int sem_all_v(int sem_id,int id_1,int id_2){ struct sembuf sb[2]; sb[0].sem_num=id_1; sb[0].sem_op=1; sb[0].sem_flg=SEM_UNDO; sb[1].sem_num=id_2; sb[1].sem_op=1; sb[1].sem_flg=SEM_UNDO; if(semop(sem_id,sb,2)==-1) { printf("semaphore_p failed"); return 0; } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -