Linux之同步机制(信号量,自旋锁)

当我们有两个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内核中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值