信号量与互斥量的区别:semaphore vs mutex

信号量和互斥量都可以用来保护共享资源。

互斥量:取值为0或1
线程一在访问共享资源A的时候,将互斥量mutex_a置为1,线程一访问A中……此时线程二也想访问A,检测到mutex_a为1,则线程二不再往下执行,等到线程一访问完A后,将mutex_a置为0。线程二检测到mutex_a为0,则线程二将mutex_a置为1,线程二访问A中……

即,使用互斥量可以使得共享资源一次只被一个线程访问。

信号量:取值为非负整数
信号量一般用于管理可以分块访问的共享资源,即假设现在有一个容量为5的数组(有五个房间的酒店),是我们的共享资源,则信号量的初始值为5,当有线程六要访问/占用该共享资源时,会先检查信号量是否为0,即检查是否还有空闲资源可用,大于0则将信号量减一,表明自己占用了一块共享资源。若检测到信号量为0,则线程六不再往下执行,等占用资源的线程用完资源后把资源释放出来了(检测到信号量大于0时),再使用该共享资源。

二值信号量:取值为0或1,用于保护容量为1的共享资源,二值信号量实现的保护效果与互斥量的效果一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值