linux 创建信号量,关于linux信号量的基本使用

#include 1:       int semget(key_t key,int nsems,int semflg);

key:系统根据这个值来获取信号量集。

nsems:此信号集包括几个信号量。

semflg:创建此信号量的属性。 (IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR)

成功则返回该信号量集的ID。

注:

既指定IPC_CREAT又指定IPC_EXCL时,如果系统中该信号量集已经存在,则马上返回。

如果需要获得存在的信号量,则将此参数置0.

2:      int semctl(int   semid,int senum,int cmd....)

semid:信号量ID。

senum:对信号量集中的第几个信号量进行控制。(从0开始)

cmd:需要进行的操作。(SETVAL是其中的一个)。

根据cmd的不同可能存在第四个参数,cmd=SETVAL时,表示同时信号量可以被获得几次,如第四个参数

num=1表示只能被获得一次,既被信号量保护的资源只能同时被一个程序使用。

该系统调用,是在对信号量初始化时用的。

-3:   “3”前面加了"-"表示当需要使用互斥资源时应该做这步。

int semop(int semid,struct sembuf *sem,int num_elements);

struct sembuf {

unsigned short sem_num;    //该信号量集中的第几个信号量。

int sem_op;//需要获得还是释放信号量

int sem_flg;//相关动作

};

num_elements:需要对该信号量集中的多少个信号量进行处理。

获得信号量时,将sembuf结构提初始化为:

sem_num = 0; //该信号量集中的首个信号量

sem_op = -1; //获得信号量

sem_flag = IPC_NOWAIT;   //如果不能获得信号量,马上返回。

semop(semid,_sem,1);

同理释放信号量时,将sem_op设为1.

以上是对信号量的简单处理,望深入学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值