📄 op.h
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/sem.h>#include <sys/shm.h>#define SIZE 1024union semun { int val; struct semid_ds *buf; unsigned short *array;};int create_sem(key_t key) /* creat semaphore */{ union semun mutex,empty,full; int semid; mutex.val = 1; empty.val = 10; full.val = 0; if((semid = semget(key, 3, 0666 | IPC_CREAT)) < 0) { printf("create semaphore error\n"); exit(-1); } if((semctl(semid,0,SETVAL,mutex) < 0)|(semctl(semid,1,SETVAL,empty) < 0)|(semctl(semid,2,SETVAL,full) < 0)) { printf("set vale of semaphore error\n"); exit(-1); } return semid;}int del_sem(int semid){ union semun sem; sem.val = 0; if(semctl(semid,0,IPC_RMID,sem) < 0) { printf("delete semaphore error\n"); exit(-1); } return 0;}int get_sem(key_t key){ union semun sem; int semid; semid = semget(key,0,0); if(-1 == semid) { printf("get semaphore error\n"); exit(-1); } return semid;}int p_mutex(int semid){ struct sembuf sops; sops.sem_num = 0; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; if(semop(semid, &sops, 1) == -1) { printf("p_mutex operation error\n"); exit(-1); } return 0;} int p_empty(int semid){ struct sembuf sops; sops.sem_num = 1; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; if(semop(semid,&sops,1) == -1) { printf("p_empty operation error\n"); exit(-1); } return 0;}int p_full(int semid){ struct sembuf sops; sops.sem_num = 2; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; if(semop(semid,&sops,1) == -1) { printf("p_full operation error\n"); exit(-1); } return 0;}int v_mutex(int semid){ struct sembuf sops; sops.sem_num = 0; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; if(semop(semid,&sops,1) == -1) { printf("v_mutex operation error\n"); exit(-1); } return 0;}int v_empty(int semid){ struct sembuf sops; sops.sem_num = 1; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; if(semop(semid,&sops,1) == -1) { printf("v_empty operation error\n"); exit(-1); } return 0;}int v_full(int semid){ struct sembuf sops; sops.sem_num = 2; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; if(semop(semid,&sops,1) == -1) { printf("v_full operation error\n"); exit(-1); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -