sgu*_*pta 1 linux kernel spinlock
我已经阅读了很长一段时间,但对我来说没有意义.可能是因为我对这一切都是新手,但仍然不了解很少的内核概念.
这就是我提出的(没有错误或NULL处理,这只是为了问题):
内核螺旋锁在内核线程中执行,这是预先设置的.
void spinlock_acquire(spinlock_t *spinlock)
{
tryagain:
while(spinlock->plock != UNLOCKED) ;
context_switch_block;
if(spinlock->plock != UNLOCKED) {
context_switch_unblock;
goto tryagain;
}
spinlock_lock(spinlock, current_thread);
context_switch_unblock;
}
Run Code Online (Sandbox Code Playgroud)
在Linux是抢占式内核之前,UP上的自旋锁基本上都是无操作的.一旦内核被抢占,就会preempt_disable()向spinlocks添加一个调用.
所以它或多或少像这样:
spin_lock_bh,它禁用softirqs ,tasklet 等...(bh用于历史名称,它来自"下半部分").spin_lock_irq*,从而禁用硬件中断.| 归档时间: |
|
| 查看次数: |
2878 次 |
| 最近记录: |