我已经读了很长一段时间了,但对我来说没有意义。可能是因为我对这一切都很陌生,仍然不了解一些内核概念。
这就是我想出的(没有错误或 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;
}