Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122014
  • 博文数量: 32
  • 博客积分: 506
  • 博客等级: 下士
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-11 11:06
文章分类

全部博文(32)

文章存档

2012年(32)

分类: LINUX

2012-10-08 10:44:39

Linux的内核锁主要是自旋锁和信号量

1,
自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
2
Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。
阅读(1013) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:函数可重入性学习

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