【linux】信号量!!!

基本概念:

临界资源:当一块资源只能够被一个进程访问的时候,这块资源就叫临界资源。
临界区:进程里面访问临界资源的代码叫做临界区。

信号量的本质:计数器,计算描述临界资源的多少。

信号量集函数:


int semget(key_t key,int nsem,int semflg);
key:信号量集的名称
nsems:信号量集的个数
semflg:模式标志

若函数调用成功则返回信号集的标识码,若失败则返回-1

控制信号集函数:

int semctl(int semid,int semnum,int cmd);
semid:信号集标识码
semnum:信号集里面的信号量序号
cmd:将要采取的动作

创建和访问一个信号集:

int semop(int semid,struct sembuf* sops,unsigned nsops);
semid:信号集的标识码
sops:结构体指针
nsops:信号集的个数

sembuf结构体:

struct sembuf{
    short sem_num; //信号集的编号
    short sem_op;//信号量集一次操作PV时候的值
    short sem_flg;//两个取值IPC_NOWAIT或者IPC_UNDO
};

原理:
由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:
P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行
V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值