关于自旋锁的理解
来源:互联网 发布:重庆知梦科技有限公司 编辑:程序博客网 时间:2024/06/04 18:04
Spin_lock()
//
Spin_unlock()
自旋锁的作用就是对于一个临界资源将其进行锁定,使得同时不能有两个及以上的进程对该临界资源进行访问。
在smp上面,调用了spin_lock()之后,如果该锁现在没有被锁定,则锁定该锁并进入临界区,此时如果另一个CPU也要用到当前锁,则会自旋,但是在自旋的时候,它会调用preemp_enable(),使得其进程是可抢占的,因此可以被更高优先权的进程所抢占。
如果是在单CPU上面,则只是执行禁止与开户抢占这个功能。对于这个情况:
Spin_lock()
//
Spin_unlock()
假如运行在其中的时候该进程的时间片用完了的话,是该如何来处理呢?
在单处理机上,spin_lock()就退化成了。Preemp_disable(),它就是禁止抢占,即虽然时间片用完了,但是仍然是不能切换到其它进程去的。因此每个进程有一个preemp_count这个变量,如果这个变量为0的话表示其可以被其它进程所抢占,如果大于0则不能够被抢占,而在调用preemp_disable()的时候就会将该进程的preemp_count值加1。使得其不能够被抢占。而继续运行该进程,直到调用preemp_enable()将其设为可抢占,由于时间一般不长,因此不会有影响。
但是spin_lock()虽然不会进行进程切换,但它可能会被中断给打断,执行中断处理程序,此时在中断处理程序中就不能再调用spin_lock()去锁定刚刚被锁定的内容。否则会引起死锁。因此在内核中就会使用另外两个函数。
Spin_lock_irqsave()
Spin_unlock_irqstore()
- 关于自旋锁的理解
- 关于自旋锁spinlock的一些理解
- linux自旋锁的理解
- 关于自旋锁的问题
- 我对 自旋锁 的理解
- linux内核--自旋锁的理解
- 自旋锁 spinlock 理解
- linux自旋锁理解
- 深入理解linux自旋锁
- 理解自旋锁(spin lock)
- 自旋锁在单处理器环境是无效的理解
- 一个关于自旋锁(spin lock)问题的讨论
- 自旋锁的应用
- 自旋锁的实现
- 自旋锁的应用
- linux的自旋锁
- 多线程的自旋锁
- 自旋锁的讨论
- key中断
- 能说多种语言的人更聪明吗?
- linux等待队列
- C#给图片加水印,可设置透明度
- C/C++内存管理
- 关于自旋锁的理解
- 精确计时:纳秒
- 对电工的认识
- linux设置时间
- 让WINDOWS SERVER 2003突破4G内存
- 常用正则表达式
- 调试 日记
- linux支持NTFS
- 10 Best Open Source ERP Systems