【发布时间】:2016-06-17 21:07:40
【问题描述】:
是否 100% 保证最先到达 wait_for_completion_timeout 的线程会在调用完成时首先唤醒?
也许我错了,但我看以下场景:
线程 A 调用 wait_for_completion_timeout 并进入睡眠状态。当调用完成时,它会唤醒并完成函数 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 先开始等待。
谁能告诉我我错过了什么?
【问题讨论】:
标签: multithreading linux-kernel