gpt4 book ai didi

linux - 自旋锁原子上下文期间的抢占和休眠

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:18 25 4
gpt4 key购买 nike

我们知道锁定自旋锁会禁用相关处理器上的抢占。所以现在,假设执行的内核代码调用了一个使进程休眠的函数。尽管抢占停用,Linux 内核是否会将处理器交给另一个线程?

最佳答案

这取决于。有一系列 cond_resched() 函数正在检查是否设置了抢占位,从而禁用重新安排:

/*
* Returns true when we need to resched and can (barring IRQ state).
*/
static __always_inline bool should_resched(void)
{
return unlikely(!preempt_count() && tif_need_resched());
}

int __sched _cond_resched(void)
{
if (should_resched()) {
__cond_resched();
return 1;
}
return 0;
}

但并非所有内核例程都这样做。 IE。互斥体直接调用 schedule_preempt_disabled(),它会忽略原子性检查。在这种情况下,schedule() 会尝试将 CPU 分配给另一个任务,但会提示“调度是原子的”。

关于linux - 自旋锁原子上下文期间的抢占和休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29602296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com