Chinaunix首页 | 论坛 | 博客
  • 博客访问: 658217
  • 博文数量: 185
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2107
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(185)

文章存档

2024年(1)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2011-02-12 23:29:50

p { margin-bottom: 0.21cm; }

自旋锁

1.自旋锁(spin lock)

处理复杂的临界区,如结构体的更新时,需要锁来提供保护。

自旋锁是为多处理器环境设计的一种特殊的锁机制,它最多只能被一个可执行路径“锁着”。

如果内核控制路径发现锁状 态是”open”,则获得锁,并继续自己的执行。相反,如果内核控制路径发现,锁由运行在另一个CPU上的内核控制路径”锁着”,就在周围“旋转”,反复执行一条紧凑的循环指令,直到锁被释放。

自旋锁的循环指令表示“忙等”,即使等待的内核控制路径无事可做,它也在CPU上保持运行。忙等期间,内核抢占还是有效的,等待自旋锁的进程有可能被更高的优先级的进程替代。

在单处理器上,自旋锁仅仅是禁止或启用内核抢占。

2.linux内核中的自旋锁

初始化自旋锁

spinlock_t mylock = SPIN_LOCK_UNLOCKED;

spin_lock_init(spinlock_t *lock)

加锁函数

spin_lock(spinlock_t *lock)

spin_lock_irqsave(spinlock_t *lock, unsigned long flags)

spin_lock_irq(spinlock_t *lock)

spin_lock_bh(spinlock_t *lock)

解锁函数

spin_unlock(spinlock_t *lock)

spin_unlock_irqsave(spinlock_t *lock, unsigned long flags)

spin_unlock_irq(spinlock_t *lock)

spin_unlock_bh(spinlock_t *lock)

非阻塞的自旋锁

spin_trylock(spinlock_t *lock)

spin_trylock_bh(spinlock_t *lock)

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

上一篇:优化和内存屏障

下一篇:读写自旋锁

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