当你有一个紧密的循环轮询某事物的状态时,我不太确定如何进行轮询而不妨碍其他想要使用 CPU 的进程。例如,这样做:
while (state == BUSY) state = check_state();
好像很浪费资源。我认为最好的方法是:
while (state == BUSY) {
sched_yield();
state = check_state();
}
我希望 top 会将进程列为睡眠状态,即使它在执行此操作时确实消耗了 100% 的 CPU。这样,该过程将(我希望)“很好地”轮询。但事实并非如此。目前我有
while (state == BUSY) {
sleep(1);
state = check_state();
}
这是完全可以接受的,但我觉得它可以做得比这更好。有这样做的标准做法吗?