QNX多线程同步之Semaphore

本文介绍了QNX系统中Semaphore的工作原理和使用,通过士兵过桥的比喻,阐述了Semaphore如何控制并发线程数量,保证资源安全访问。通过示例代码展示了Semaphore的初始化、等待和释放操作,以及在无Semaphore情况下的问题对比。
摘要由CSDN通过智能技术生成
 

之前讲了QNX上Mutex的使用,Mutex作用是锁住一个资源,保证同一时间只有一个线程可以使用该资源。不过,有些情况下Mutex不能满足需求,比如某个资源可以允许两个线程同时访问,但是不允许超过两个线程访问它。这种情况下如果还是使用Mutex的话只有一个线程可以访问该资源,没有充分利用允许两个线程访问的属性。Semaphore就适合这种情况,Semaphore翻译成“信号灯”,主要是通过信号灯的数量控制访问资源的线程数。

下面通过一个形象一点的例子说明Semaphore的使用。

假设有3个连队的士兵要通过一座桥,不过这座桥同时只能有两个人通过,有三个人通过的话就会垮掉。士兵们知道了桥的情况,所以在连队内做了规定,士兵们排队通过,只有前面的士兵通过桥之后,排在后面的一个士兵才能上桥。

不过连队内的规定并不能解决问题,虽然3个连队的士兵都按连队内的规定逐个通过,但是连队之间没有协定,3个连队的第一个士兵都走上了桥,桥就垮了。因此,需要在连队之间再做一个协定(这就是多线程同步了)。

就假设军队里有个厉害的工兵,在桥上安装了个信号灯装置(就是Semaphore了),桥头有个按钮,桥尾有个按钮,桥头的按钮按一下桥上就亮起一盏灯,桥尾的按钮按一下桥上就灭一盏灯。

有了这个装置,剩下的就是给连队下规定了,规定每个连队派人上桥之前要确定桥上的灯不能亮两盏(当然也不能是两盏以上)。如果两盏灯都是亮的,必须等待到有灯灭了才可以上桥。同时,士兵上桥之前要按一下桥头的按钮,下桥的时候要按一下桥尾的按钮。

这样,3个连队的士兵都可以安全过桥了,前提是大家都按规定使用信号灯。<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值