Linux设备驱动程序之并发控制(二).doc

Linux设备驱动程序之并发控制(二).doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux设备驱动程序之并发控制(二).doc

上集说到哪儿了呢?瞧这记性,什么?说到天要下雨,娘要嫁人那段。。 这是谁在答话,废话,我当然知道讲到这里了,我是说驱动讲到哪里了。算了,不管了.. 话说Linux开源社区的开发者们做了什么工作呢,很简单: 利用spin_lock()/spin_unlock()作为自旋锁的基础,将它们和关中断local_irq_disable()/开中断local_irq_enable(),关底半部local_bh_disable()/开底半部local_ bh_enable(),关中断并保存状态字local_irq_save()/开中断并恢复状态local_irq_restore()结合就完成了整套自旋锁机制。 唉吆,我的天啊,不是我说你们开源社区的那些家伙们,说个东西为啥要那么费劲,就为了说完上面那些红色的破话,差点没喘过来,本来在上篇就想说你们的… 好人做到低,送你送到西,嘿嘿..我把上边的关系再帮大家捋捋,免的看着费劲… spin_lock_irq() = spin_lock() + local_irq_disable() spin_unlock_irq = spin_unlock() + local_irq_enable() spin_lock_irqsave() = spin_unlock() + local_irq_save() spin_unlock_irqrestore() = spin_unlock() + local_irq_restore() spin_lock_bh() = spin_lock() + local_bh_disable() spin_unlock_bh() = spin_unlock() +local_bh_enable() 又是一口气,这是什么年头,挣点点击率,怎么就这么难呢..不过也是没办法的事,上了Linux这条贼船,就要有牺牲我一个,幸福全中国的决心,不然微软的又要嚣张了,今天黑你一次屏,明天断你一次网,就连去网吧,微软还伸手到你面前说:对不起,你的系统是盗版… 好了,让他们热闹去吧,说说咱们的事。作为Linux驱动程序工程师,你要在心里刻下几条戒律: 1)什么叫自旋锁,就是忙等待,当锁不可用时,CPU除了在那儿拼命的执行测试并设置的傻瓜操作外什么都不做,才不管电影中含情脉脉的你是她的谁,她是你的谁的这些事,任你两情相约,也是执手相看泪眼,竟无语凝咽。可见,这是多么的影响系统的性能。 2)what?你不懂爱情,不在乎第一条,我晕…那就给你来个狠的:处理不好自旋锁可能导致系统死锁(dead lock),系统瘫痪。呵呵怕不,等你哭着闹着要上网而不能时,就怕了。那为啥会这样了,很简单,想想:如果我们不小心在一个递归中使用一个自旋锁,说白了就是一个CPU,它已经获得了这个自旋锁,可还贪心地想第二次获得这个自旋锁,这时就死锁了呗。另外,如果一个进程获得自旋锁之后再阻塞,也是很有可能导致死锁的发生。 理论完了,给你来点代码,就当是程序员点的一点交代吧: int device_count = 0; 定义文件打开的次数计数 static int device_open(struct inode *inode, struct file *filp) { ... spinlock(device_count); if(device_count) //已经打开 { spin_unlock(device_count); return -EBUSY; } device_count++; //增加使用计数 spin_unlock(device_count); ... return 0; } static int device_release(struct inode *inode, struct file *filp) { ... spinlock(device_count ); device_count--; //减少使用计数 spin_unlock(device_count ); return 0; } 出招表四:读写自旋锁(防写不防读) 找你所说,上面的那招自旋锁看似相当好啊.. 那是,也不看看是谁教的.. 那我就不明白了,接着你说的例子:你说我买票是吧,售票员看到一张票(读)也没错啊,错在与她把票卖出去的操作上(写),你这可好,这样一来,一旦一个锁住,别人都别想看了,这也太傻瓜了吧..小王不屑的鄙视我。 耶呵,看不出来哈,你都知道用脑袋想问题了,以前不是都是要大脚趾计算的吗..什么时候升级换代的..我吃惊的瞪着眼,那好,不拿出点真货你搞不定你了..请看新招之读

文档评论(0)

docinppt + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档