8.信号量

信号量原理

一、互斥

互斥的引出:
让不同的进程看到同一份资源,比如共享内存,也带来一些时序问题,造成数据不一致问题

1.我们把多个进程(执行流)看到的公共的一份资源成为临界资源
2.我们把自己的进程,访问临界资源的代码,成为临界区
3.多个执行流,互相运行的时候会互相干扰,因为我们不加保护的访问了同样的资源(临界资源),在非临界区的多个执行流互相是不影响的
4.为了更好的进行临界区的保护,可以让多执行流在任何时刻都只能有一个进程进入临界区,这种行为称为互斥,方式是加锁
5.原子性:要么不做,要么做完,没有中间状态,就称之为原子性

二、信号量

2.1是什么

每一个进程想进入临界资源,访问临界资源中的一部分,方式是:不能让进程直接区使用临界资源,而是让这个进程先去申请信号量

信号量是什么?
本质是一个计数器,用于控制对共享资源的访问

1.申请信号量成功,表示我具有访问资源的权限了,并且临界资源内部一定给进程预留了想要的资源。
2.申请了信号量,当前就一定要访问我要的资源?不一定,申请信号量是对临界资源的一种预定机制
3.信号量可以有效保证进入共享资源的执行流数量
4.所以每一个执行流想访问共享资源的一部分时,不是直接访问,而是先申请信号量

要访问临界资源,先申请信号量。信号量也是共享资源,要保护别人,先保护自己。怎么保护?原子性的申请和释放pv操作

2.2 P、V操作

步骤:
1.申请信号量(P操作),信号量计数器减1,如果此时信号量的值小于0,则进程或线程将被阻塞。
2.访问临界资源。
3.释放信号量(V操作),信号量计数器加1,并唤醒可能因为等待信号量而被阻塞的进程或线程。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值