实现设备只能被一个进程打开
2013-11-14 10:05
148 查看
一. 使用原子变量
二 . 使用自选锁
static atomic_t xxx_available = ATOMIC_INIT(1); //定义原子变量 static int xxx_open(struct inode *inode, struct file *filp) { ... if(!atomic_dec_and_test(&xxx_available)){ atomic_inc(&xxx_available); return -EBUSY; //第一次打开,if内测试变量自减后是否为0,为0返回ture,取反则条件不成立,第二次打开时自减后不为0,返回false,取反条件成立,退出 ... return 0; } static int xxx_release(struct inode *inode, struct file *filp) { atmomic_inc(&xxx_available); return 0; } }
二 . 使用自选锁
int xxx_count = 0;// 定义文件打开次计数 static int xxx_open(struct inode *inode, struct file *filp) { ... spinlock(&xxx_lock); if(xxx_count){ //已经打开 spin_unlock(&xxx_lock); return -EBUSY; } xxx_count++;//增加计数 spin_unlock(&xxx_lock); ... return 0; } static int xxx_release(struct inode *inode, struct file *filp) { ... spinlock(&xxx_lock); xxx_count--; spin_unlock(&xxx_lock); return 0; }三 . 信号量
static DECLARE_MUTEX(xxx_lock); /*strcut semaphore sem * init_MUTEX(&sem); * 2.6.25版本后不适用init_MUTEX,用sema_init(sem,1)代替 */ static int xxx_open(struct inode *inode, struct file *filep) { ... if(down_trylock(&xxx_lock)) //第一次打开获取锁,第二次打开不能获取 return -EBUSY; ... return 0; } static int xxx_release(struct inode,struct file *filp) { up(&xxx_lock); return 0; }
相关文章推荐
- c++builder 如何实现一个应用程序只能打开一个进程
- 实现一个应用程序只能打开一个进程
- 在VC中实现一次执行一个进程,如果同时打开两个,则报该程序已经运行
- 最近根据别人提示的一个想法,东拼西凑,终于实现了android系统中只能看到自己的系统,我称之为唯一系统。 很多企业做设备或是做产品的或是集成商 其中的一部分设备直接用android智能机。担是又不让
- (转)linux用文件锁实现保证一个程序只能启动一个进程
- winform程序只能打开一个进程
- linux用文件锁实现保证一个程序只能启动一个进程
- C#实现一次只能打开一个客户端以及关闭自动重启的问题
- [技巧] C#实现让程序只能打开一个实例(总结3方法)
- C#实现让程序只能打开一个实例(总结3方法)(转)
- C#进程间的同步,实现只能运行一个程序的效果
- C#实现让程序只能打开一个实例(总结3方法)(转)
- winform程序限制只能打开一个进程
- C#实现让程序只能打开一个实例(总结3方法)
- winform程序限制只能打开一个进程
- CreateMutex实现只能打开一个客户端
- C#实现让程序只能打开一个实例(总结3方法)
- winform实现让程序只能打开一个实例(总结3方法)
- linux用文件锁实现保证一个程序只能启动一个进程
- 折叠菜单(怎么实现点击一个打开,另一个收起)