自旋锁使用详解

自旋锁

1、概念

       它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。

       例子:一间屋子,一个人进去之后就把钥匙带进去了,你想要进这个屋子,只能等屋子里边的人出来将钥匙给你之后你才能进去,你在门口等待里边的人出来的过程就是自旋的过程(你要一直检查屋子里边是否有人);

 

2、自旋锁的弊端

       一个被争用的自旋锁使得请求他的线程在等待锁重新可用时会自旋,这个过程非常耗时间,所以一个自旋锁不应该被占用比较长的时间

 

3、普通使用方法

    DEFINE_SPINLOCK(lock);		//定义并初始化锁
    Spin_lock(&lock);				//获取锁
    临界区......
    Spin_unlock(&lock);  			//释放锁

4、在中断中的使用方法

    DEFINE_SPINLOCK(lock);		//定义并初始化锁
    Unsigned long flag;
    Spin_lock_irqsave(&lock, flag);  //保存中断的当前状态并禁止本地中断,在获取锁
    临界区......
    Spin_unlock_reqrestore(&lock, flag);//释放锁并将中断恢复到之前保存的状态

注意:需要锁的东西是数据而并不是代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值