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

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

ID:50369674

大小:131.00 KB

页数:14页

时间:2020-03-08

Linux设备驱动程序之并发控制.doc_第1页
Linux设备驱动程序之并发控制.doc_第2页
Linux设备驱动程序之并发控制.doc_第3页
Linux设备驱动程序之并发控制.doc_第4页
Linux设备驱动程序之并发控制.doc_第5页
资源描述:

《Linux设备驱动程序之并发控制.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux设备驱动程序之并发控制(一)“小涛,你说十一黄金周,火车站,飞机场那些售票系统咋没一个宕掉的呢。你不宕掉也没关系,来两个卖错票的,说不定哥就去上海看世博,去北京看青梅竹马的表妹了…”小王抱怨道。“晕死..哥鄙视你,你说都老大不小的人了,怎么脑子里天天都是MM之类的事了,能不能有点男子气概啊..”。“靠,能跟你比啊,你是饱汉不知饿汉饥,要是像你一样十一和…”"嗯,啊,哼哼.."没等他说完,我赶忙塞了双臭袜子(哪天的也记不住了)。“得得,I服了you,ok”。“不过话说回来,小王,你说的还真是个问题,想想这样的问题,你和

2、GF两个要去西湖看白娘子,偏偏遇到老天跟你过不去,就只剩下一张票了,你和GF两个谁去…“"不是吧,我这命苦,好不容易有个GF,应该不会出现的,呵呵,如果出现…那好办,我和她商量好,咱们一起在晚上12:00一起买票,这样我们两边的售票员怎么看都各自有一张票,我们两个就可以一起了"小王狡黠的笑着。“笨,我一口一个盐水喷死你,分明一张票,你们两个同一个时间去两个不同的售票点去买,它还是一张票,怎么可能说去两个不同地方,两个售票员都看到有一张票,然后就把这唯一的一张同时卖给了你们两个人”我打断到。"算了,看在室友兼我的最忠实狗仔队员的

3、身份,哥就传授一招只传MM的绝学----Linux设备驱动程序之并发控制"。听说过并发没,那你肯定听说过竞争,比如竞争上岗,还有你最熟悉的追MM,这也是竞争。那么并发(concurrency)就是说多个执行单元同时,并行被执行,这多个单元却不巧要同时访问一些资源。这其中要分三种情况:    正所谓:道高一尺,魔高一丈,你孙悟空有72变,人家二郎神还有73变不是。有问题,没关系,找小涛哥不是..呵呵。现在就教你几招以备不时只需:大家不是要竞争吗,那好,总体原则就是不让你竞争:保证一个执行单元在访问共享资源的时候,其他的执行单元被

4、禁止访问,将竞争扼杀在萌芽状态。这就是传说中的对共享资源的互斥访问。出招表一:中断屏蔽(可以保证正在执行的内核执行路径不被中断处理程序抢占,由于Linux内核的进程调度都依赖中断来实现,内核抢占进程之间的竞态就不存在了)使用方法:local_irq_disable() //屏蔽中断说明:local_irq_disable()和local_irq_enable()都只能禁止和使能本CPU内的中断并不能解决SMP多CPU引发的竞争。         criticalsection //临界区         local_irq_e

5、nable() //开中断   与local_irq_disable()不同,local_irq_save(flags)除了进行禁止中断操作以外,还保证目前CPU的中断位信息,local_irq_save(flags)进行相反的操作。   致命弱点:由于Linux系统的异步I/O,进程调度等很多重要操作都依赖于中断,在屏蔽中断期间所有的中断都无法处理,因此长时间屏蔽中断是很危险的,有可能造成数据丢失甚至系统奔溃。出招表二:原子操作(忘了是物理还是化学老师拉着我的手说:原子是最小的,不能再分的东西.看多形象,执行过程不能被别的代

6、码路径中断的操作就是原子操作,还想跟我竞争,门都没有)。分为整形原子和位原子操作。 使用方法一:整形原子操作1)设置原子变量的值voidatomic_set(atomic_t*v,inti);//设置原子变量的值为iatomic_tv=ATOMIC_INIT(0);//定义原子变量v并初始化为02)获取原子变量的值atomic_read(atomic_t*v);//返回原子变量的值3)原子变量加/减voidatomic_add(inti,atomic_t*v);//原子变量增加ivoidatomic_sub(inti,atom

7、ic_t*v);//原子变量减少i4)原子变量自增/自减voidatomic_inc(atomic_t*v);//原子变量加1voidatomic_dec(atomic_t*v);//原子变量减15)操作并测试intatomic_inc_and_test(atomic_t*v);//这些操作对原子变量执行自增,自减,减操作后测试是否为0,是返回true,否则返回falseintatomic_dec_and_test(atomic_t*v);intatomic_sub_and_test(inti,atomic_t*v);6)操作

8、并返回intatomic_add_return(inti,atomic_t*v);//这些操作对原子变量进行对应操作,并返回新的值。intatomic_sub_return(inti,atomic_t*v);intatomic_inc_return(atomic*v);int

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。