Linux驱动:LED驱动之八——semaphore信号量(并发与竞争)

本文详细介绍了Linux驱动中的信号量机制,包括其作为并发控制手段的作用,与自旋锁的区别,并展示了信号量的API函数使用。通过驱动源码、编译Makefile、测试程序及结果分析,阐述了信号量如何确保资源的安全访问,特别是在多线程场景下避免竞争条件的发生。
摘要由CSDN通过智能技术生成

1、信号量是什么

1.1 简介

  信号量是并发与竞争的一种解决方法之一,在应用层和内核层都有相应的信号机制。可以这么理解:当一个线程获得信号量后,该线程会往下运行,如果线程获取不到信号量,它就会原地休眠,等待其他线程释放了信号量,就好比“发信号”把它给唤醒继续往下运行,线程释放信号量后其值会加1,获取到信号量后其值会减1,当信号量为0的时候,线程会阻塞等待其他线程释放信号量。

1.2 信号量与自旋锁区别
  • 休眠:使用自旋锁时尽量不要长时间阻塞或休眠,信号量等待时会引起休眠,它适合长时间占用资源的情景,避免频繁切换引起资源的开销;
  • 中断:自旋锁可以在中断里使用,由于信号量会使进程/线程进入休眠,所以信号量不能在中断里使用;

1.3 信号量的API函数

在文件include/linux/semaphore.h、kernel/locking/semaphore.c中有定义:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

R-QWERT

你的鼓励是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值