全文预览

linux驱动工程师面试题整理

上传者:火锅鸡 |  格式:docx  |  页数:16 |  大小:38KB

文档介绍
生了。自死琐是说自己占有了某个资源,然后自己又申请自己已占有的资源,显然不可能再获得该资源,因此就自缚手脚了。递归使用一个自旋锁就会出现这种情况。Р Р信号量Р信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。Р 信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。Р信号量基本使用形式为:Р static DECLARE_MUTEX(mr_sem);//声明互斥信号量Р if(down_interruptible(&mr_sem))Р           //可被中断的睡眠,当信号来到,睡眠的任务被唤醒Р           //临界区Р       up(&mr_sem);  Р信号量和自旋锁区别Р 从严格意义上讲,信号量和自旋锁属于不同层次的互斥手段,前者的实现有赖于后者。Р注意以下原则:Р       如果代码需要睡眠——这往往是发生在和用户空间同步时——使用信号量是唯一的选择。由于不受睡眠的限制,使用信号量通常来说更加简单一些。如果需要在自旋锁和信号量中作选择,应该取决于锁被持有的时间长短。理想情况是所有的锁都应该尽可能短的被持有,但是如果锁的持有时间较长的话,使用信号量是更好的选择。另外,信号量不同于自旋锁,它不会关闭内核抢占,所以持有信号量的代码可以被抢占。这意味者信号量不会对影响调度反应时间带来负面影响。Р Р自旋锁对信号量Р需求建议的加锁方法Р低开销加锁优先使用自旋锁Р短期锁定优先使用自旋锁Р长期加锁优先使用信号量Р中断上下文中加锁使用自旋锁Р持有锁是需要睡眠、调度使用信号量

收藏

分享

举报
下载此文档