29.驱动-互斥

这篇挺详细     linux 互斥机制_白冬雷的博客-CSDN博客_linux 互斥

10.按键之互斥、阻塞机制(详解) - 诺谦 - 博客园

Linux内核同步机制之(一):原子操作

自旋锁和信号量的差别好像经常在面试题被问到

linux 自旋锁和信号量_xu_guo的专栏-CSDN博客_信号量和自旋锁

linux内核信号量和互斥锁使用_仗劍走天涯-CSDN博客_linux信号量和互斥锁

原子操作:

原子操作很简单,记住几个函数就行

1)atomic_t v = ATOMIC_INIT(0);         //定义原子变量v并初始化为0

2)atomic_read(atomic_t *v);            //返回原子变量的值

3)void atomic_inc(atomic_t *v);        //原子变量增加1

4)void atomic_dec(atomic_t *v);        //原子变量减少1

5)int atomic_dec_and_test(atomic_t *v); //自减操作后测试其是否为0,为0则返回true,否则返回false

第一步:定义一个原子变量,并给原子变量赋值,一般赋予1

第二步:在需要的地方进行判断原子变量是否为零即可,使用原子操作的加减函数对变量进行加减

互斥信号量

信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。当获取不到信号量时,进程进入休眠等待状态。

定义信号量
struct semaphore sem;
初始化信号量
void sema_init (struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem);//初始化为0

static DECLARE_MUTEX(button_lock);     //定义互斥锁

获得信号量
void down(struct semaphore * sem);
int down_interruptible(struct semaphore * sem); 
int down_trylock(struct semaphore * sem);
释放信号量
void up(struct semaphore * sem);

 

自旋锁

没用过自旋锁,贴个不错的贴子算了

Linux内核中的几种自旋锁的实现_Hober-CSDN博客_自旋锁实现

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值