当我们有两个open函数同时打开同一个设别节点的时候该怎么处理,我们肯定是不希望在同一时刻有两个应用程序都打开了这个驱动,这个时候我们可以才需一些措施。
同一时刻只能够打开一个设备节点,如何实现同一时刻只能有一个进程使用某个设备?使用linux互斥机制
Linux互斥机制有哪些?
答:有很多种,如:原子变量、互斥锁、信号量、自旋锁、读写锁等等
注意以上的集中互斥机制我只会讲解原子变量,信号量。
上一篇文章的链接:http://blog.csdn.net/qq_21792169/article/details/48416773
测试程序是不变的。
代码:下面我例举了原子变量的说有用法,
原子变量
#include<asm/atomic.h>
static atomic_t canopen = ATOMIC_INIT(1); //define atom
atomic_set(v,i)//v(shi dizhi)是原子变量 *v=i;
atomic_read(v)
atomic_add(i,v)//让*v+=i
atomic_sub(i,v)//让*v-=i
atomic_inc(&canopen)//让*v+=1//减一的定义在open函数当中,但是在close函数应该把它加回来
atomic_dec(v)//让*v-=1
atomic_sub_and_test(i,v)//*v=0;返回结果是真
atomic_add_negative(i,v)//*v<0;返回结果是真
atomic_inc_and_test(v)//*v=0;返回结果是真
atomic_dec_and_test(v)//*v=0;返回结果是真1
信号量:static DECLARE_MUTEX(button_lock); //定义互斥锁
down(&button_lock);//open时候定义
up(&button_lock);//close时候定义
自旋锁也是很常用的在linux内核中。