wait_for_completion_timeout 100%公平吗?

时间:2016-06-17 21:07:40

标签: multithreading linux-kernel

是否100%保证首先获得wait_for_completion_timeout的线程在调用完成时会先唤醒? 也许我错了,但我看下面的场景: 线程A调用wait_for_completion_timeout并进入休眠状态。当调用complete时,它会唤醒并在函数do_wait_for_common中完成timeout = action(timeout);的执行。 现在让我们说另一个线程B调用wait_for_completion_timeout。现在x-> done为1,因此该线程将x-> done设置为0并继续执行。现在线程A继续执行,它转到下一行:

} while (!x->done && timeout);

然后回去睡觉。 所以线程B首先被执行,尽管线程A开始先等待。

有人可以告诉我,我错过了什么?

1 个答案:

答案 0 :(得分:2)

你没有遗漏任何东西。线程不在战争中,它们合作以推进进步。严格公平的成本很高,而且几乎从不需要,因此在一般情况下没有理由支付这笔费用。

运行最近运行的线程通常最有效,因为它的大部分数据可能仍在缓存中。因此,每个线程都会受益于“不公平”#34;政策。