Linux内核-~~~信号量

本文解析了Linux信号量如何作为睡眠锁,实现一次仅允许一个任务进入临界区。通过门把手和名单的比喻,理解信号量如何使处理器高效利用,同时对比自旋锁。

Linux信号量是一种睡眠锁。如果有一个任务试图获得一个不可用(已经被占用)的信号量时,信号量会将其推入一个等待队列,然后让其睡眠。这时处理器可以重获自由,从而去执行其他代码。当持有的信号量可用(被释放)后,处于等待队列中的那个任务被唤醒,并获得该信号量。

举例说明:

当某个人来到门前,他抓取钥匙,进入房间。

当另外一个人来到门前的时候,发现没有了钥匙,他不会在门口徘徊等待,而是把自己的名字写入一个列表中,然后就打盹去了。

当房间里面的人出来的时候,就会到门口查看一下列表,如果列表上有名字,就找到列表上的第一个名字的人把他叫醒,让他进入房间。

在这种方式中,钥匙(相当于信号量)确保一次只有一个人(相当于执行线程)进入房间(相当于临界区)。

这个方式比自旋锁提供了更好的处理器利用率。

信号量比自旋锁有更大的开销。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值