📄 semaphore.c
字号:
#include "semaphore.h"
union semun {
int val ; /* for SETVAL */
struct semid_ds *buf ; /* for IPC_STAT and IPC_SET */
ushort *array ; /* for GETALL and SETALL */
};
/* create semaphore */
int
sem_create(key_t key)
{
union semun sem ;
int semid;
sem.val = 1;
/*
int semget(key_t key, int nsems, int flag);
*/
semid = semget(key, 0, 0);
if (semid == -1)
{
semid = semget(key, 1, IPC_CREAT|0666);
if (semid == -1)
{
printf("sys alm: create semaphore failed\n");
return semid;
}
else
printf("sys not: create semaphore success\n");
/*
int semctl(int semid, int semnum, int cmd, union semunarg) ;
*/
/* init semaphore */
semctl(semid, 0, SETVAL, sem);
return semid;
}
else
printf("sys not: get semaphore success\n");
return semid;
}
/* delete semaphore */
void sem_delete(int semid)
{
/*
int semctl(int semid, int semnum, int cmd, union semunagr);
*/
/* delete semaphore */
semctl(semid, 0, IPC_RMID, 0);
printf("sys not: delte semaphore success\n");
}
/* p operation */
int p(int semid)
{
struct sembuf sops={0, -1, SEM_UNDO};
/*
int semop(int semid, struct sembuf semoparray[], size_t nops);
semoparray is a point.
*/
return(semop(semid, &sops, 1));
}
/* v operation */
int v(int semid)
{
struct sembuf sops={0, +1, SEM_UNDO};
/*
int semop(int semid, struct sembuf semoparray[], int nops);
*/
return(semop(semid, &sops, 1));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -