Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316981
  • 博文数量: 113
  • 博客积分: 446
  • 博客等级: 下士
  • 技术积分: 1229
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-09 16:01
个人简介

Let's go!!!!!

文章分类

全部博文(113)

文章存档

2019年(5)

2018年(4)

2017年(9)

2016年(5)

2015年(39)

2014年(6)

2013年(28)

2012年(17)

分类: LINUX

2015-07-23 14:27:00

Linux内核中最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程占有。如果一个执行线程试图获得一个被已经持有的自旋锁,那么该线程就会一直进行忙循环——等待锁重新可用。

 

自旋锁基本使用形式:

DEFINE_SPINLOCK(mr_lock);

spin_lock(&mr_lock);

/*临界区*/

spin_unlock(&mr_lock);

 

自旋锁可用在中断处理程序中使用。在中断处理程序中使用自旋锁时,一定要在获取锁之前,禁止本地中断。自旋锁在中断中的使用形式

DEFINE_SPINLOCK(mr_lock);

unsigned long flags;

spin_lock_irqsave(&mr_lock,flags);

/*临界区*/

spin_lock_irqrestore(&mr_lock,flags);



读—写自旋锁

一个或多个读任务可以并发的持有读者锁;相反,用于写的锁最多只能被一个任务持有,而且此时不能有并发的读操作(写时不能读)。

 

读—写自旋锁基本使用形式:

DEFINE_RWLOCK(mr_rwlock);

read_lock(&mr_rwlock);

/*临界区 只读*/

read_unlock(&mr_rwlock);

 

write_lock(&mr_rwlock);

/*临界区 读写*/

write_unlock(&mr_rwlock);

在使用Linux读—写自旋锁时,最后要考虑一点是这种锁机制照顾读比照顾写多一点。当读锁被持有时,写操作为了互斥访问只能等待,但是,读者却可以继续成功的占有锁。而自旋锁等待的写者在所有读者释放锁之前是无法获取得到的(读时不能写)。


阅读(527) | 评论(0) | 转发(0) |
0

上一篇:原子操作

下一篇:指针操作实例

给主人留下些什么吧!~~