信号量

什么是信号量
信号量主要保护共享资源的,确保该资源在同一时刻只有一个线程占用。
换句话说它就是控制多进程(多线程)共同访问共享资源的一种手段。
信号量的定义
最初的定义:信号量是一个特殊的变量,它只能取正整数值,并且程序对其访问都是原子操作。

正式的定义:它是一个特殊的变量,只允许对它进行等待和发送信号。

信号量就是一种特殊的计数器
当其值>0时,其表示可用临界资源的个数
当其值<0,表示资源忙,至少有一个线程在等待。
信号量工作原理

先看计数器计数的方式:

自增型:开始计数为0,来一个自增1,走一个自减1,到计数最大值不允许再来
自减型:开始计数 就是最大值,来一个自减1,走一个自增1,计数到0不允许再来
信号量采用的是自减型,这里说下我个人的理解:(MAX为最大值)
1)我们一般关心资源占用完了没,而不是这个资源一共可以被几个进程占用。所以我们关心的是什么时候不允许再来。
显然自减型判断是否为0更为方便。

我们可以用公共停车场来解释

公共停车场 :信号量控制访问的临界资源的个数
车位:临界资源
想要停车的车辆:想要访问临界资源的线程
计数器:信号量

此刻停车场共有4个停车位,3个停车位分别被车D ,车F,车E占用了,还剩下车位4此刻没被占用。

理解为:信号量管理了4个临界资源, 三个临界资源此刻被占用了,一个没被占用。

现在车A 车B 车C都想进去停车,但是车位只剩下一个。出现了一种“竞态”,谁先抢到计数器发的停车卡谁就可以进去。
进程A 进程B 进程C 同时想对信号量进行P操作,这一步是原子操作,谁先操作成功就可以进入临界区访问临界资源,其中一个进程完成了p操作后,其他两个进程会被挂起,存放入等待队列中,当信号量又>0时,排在前面的那个进程又会被唤醒,又进行p操作。


信号量分类
1)内核信号量,由内核控制路径使用
2) 用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEM V信号量。
POSIX信号量又分为有名信号量和无名信号量。
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值