gpt4 book ai didi

multithreading - 为什么对于每个线程来说,preempt_count是足够的

转载 作者:行者123 更新时间:2023-12-03 13:11:52 25 4
gpt4 key购买 nike

preempt_count变量跟踪每个CPU的统计信息:

 static __always_inline int preempt_count(void)
{
return current_thread_info()->preempt_count;
}

位0-7跟踪禁用内核抢占的次数。

位8-15(如果非零)表示软中断次数达到了该次数。

位16-27指定irq_enter的调用次数。这意味着嵌套的中断处理程序的数量。

我无法理解为什么preempt_count就足够了
每个线程。
当计划一个新进程时,偏离的位0-7将为零,否则它意味着先占被禁用并且不允许切换。但是第8-27位呢。它们也将为0吗?
这是否意味着只要有进程调度调用,那时候preempt_count应该为0,因此不需要跨不同进程的thread_info复制其值以跟踪特定CPU上的状态softirqs和irqs?

最佳答案

Linux禁止在中断时调度线程,这是一个约定,并且没有代码可实现此约束。因此,在此约定下,新线程的preempt_count必须为零,并且不需要复制preempt_count。如果有人在中断上下文中调用了schedule可能还有其他问题,例如由于先前的中断已禁用了中断,因此无法处理新的中断。

关于multithreading - 为什么对于每个线程来说,preempt_count是足够的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29345730/

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