在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发“竞态”,因此我们必须对共享资源进行并发控制。Linux 内核中解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候作为互斥锁使用)。
自旋锁与信号量“类似而不类”,类似说的是它们功能上的相似性,“不类”指代它们在本质和实现机理上完全不一样,不属于一类。
自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,“自旋”就是“在原地打转”。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。这就是它们的“不类”。
但是,无论是信号量,还是自旋锁,在任何时刻,最多只能有一个保持者,即在任何时刻最多只能有一个执行单元获得锁。这就是它们的“类似”。
鉴于自旋锁与信号量的上述特点,一般而言,自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用;
信号量适合于保持时间较长的情况,会只能在进程上下文使用。如果被保护的共享资源只在进程上下文访问,则可以以信号量来保护该共享资源,如果对共享资源的访问时间非常短,自旋锁也是好的选择。但是,如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
甲类功放电路
使用交错接地平面改善隔离式电源噪声滤除
千兆以太网技术及其进展
3W功率放大器电路
嵌入式TCPIP协议单片机技术在网络通信中的应用
嵌入式单片机PPP协议的应用研究
采用低电压电源互补输出级的1.5w低频放大器电路
为精密 ADC 供电:平均电流与瞬态电流
基于PIC32的低成本图形解决方案
光纤类型、标准和发展趋势
合康新能首创给水泵变频改造方案
威廉逊电子管放大器电路(成品功放电路)
MPLAB® X IDE 编译调试(下)
安全设计降压前置稳压器,为汽车电源保驾护航!
可以根据负载轻松而精确地进行限流吗
关于BIOS源码
Q&A红外测温技术问与答
硬件加速与我无关
拆解报告:航嘉EasyCombo 6S USB延长线插座
基于PIC32的蜂窝网机器到机器(M2M)通信解决方案
硅通孔的下一步发展
嵌入式实时系统及其在通信系统中的应用
使用 3.3V CAN 收发器在工业系统中实现可靠的数据传输
美顺ME-308纯直流电流负反馈型甲类功放
如何使用dsPIC® DSC 实现两路电机控制?
建议把DSP单独列为一个栏目
嵌入式WEB传感器的网络化接口设计
人与人之间的三种距离
CES成芯片巨头 「斗秀场」,新品巅峰对决
MPLAB® X IDE 编译调试(上)