信号量

信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源。

进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。

二值信号灯:信号灯的值只能取0或1,类似于互斥锁。 但两者有不同:
信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;
互斥锁更强调进程,占用资源的进程使用完资源后,必须由进程本身来解锁。
计数信号灯:信号灯的值可以取任意非负值。


下面是信号量的相关函数

semget

函数作用:创建信号量

函数原型:int semget(key_t key,int nsems,int semflg)

函数参数:nsems:信号量数目,通常取一个

  semflg:与open权限一样

返回值:成功则返回信号量标识符;出错-1


semctl

函数作用:信号量的控制,初始化,删除等

函数原型:int semctl(int semid,int semnum,int cmd,union arg)

函数参数:semnum1,通常为0,第一个信号量

  cmd:IPC_STAT

  IPC_SETVAL:设置arg中的val值

  IPC_GETVAL:获取信号量的值

  IPC_RMID:删除信号量

返回值:cmd不同,返回值不同。IPC_GETCAL返回信号量的值,其余的成功返回0,出错-1


semop

函数作用:执行PV操作

函数原型:int semop(int semid,struct sembuf *sops,size_t nsops)

函数参数:struct sembuf *sops:

sem_op = -1,P操作

sem_op = 1,V操作

nsops = 1

返回值:信号量标识符,出错-1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值