System V信号量

在上一篇笔记中,学习了Posix信号量。这篇笔记主要学习System V信号量,该信号量增加了信号量集的方式。
创建

#include 
#include 
#include 
int semget(key_t key, int nsems, int semflg);
  • key:信号量的标识符,可以使用ftok函数获取
  • nsems:信号量的个数
  • semflg:操作符号,比如O_CREAT方式
  • Return Value:成功返回信号量标识符,失败返回-1

一般操作操作

#include 
#include 
#include 
int semop(int semid, struct sembuf *sops, size_t nsops);
int semtimedop(int semid, struct sembuf *sops, size_t nsops,
               const struct timespec *timeout);
  • semidsemget返回的标识符
  • sops:需要操作的信号量集的首地址
  • nsops:信号量集中元素的个数
  • timeout:超时参数

sembuf含有一下几个参数:

  • unsigned short sem_num:需要操作的信号量的编号,从0开始,最大是nsems - 1。操作是原子的。
  • short sem_op:需要对信号量的操作。如果是个正数,则对应的信号量每次增加正数个单位。如果sem_flg指定为SEM_UNDO,那么减去相应的单位。如果是0,表示等待到0,即如果信号量是0,则立刻执行操作。
  • short sem_flg:信号量的标志,有IPC_NOWAITSEM_UNDO两个标志
  • Return Value:成功返回0,失败返回-1

更改操作
该操作比较复杂,具体直接参考手册。

#include 
#include 
#include 

int semctl(int semid, int semnum, int cmd, ...);

你可能感兴趣的:(Unix/Linux)