何かのステータスをポーリングするタイトなループがある場合、CPUを使用したい他のプロセスの邪魔にならずにポーリングを実行する方法がよくわかりません。たとえば、これを行う:
while (state == BUSY) state = check_state();
リソースの無駄のようです。これを行うための最良の方法は次のとおりだと思います。
while (state == BUSY) {
sched_yield();
state = check_state();
}
これを実行している間にCPUを100%消費したとしても、topはプロセスをスリープ状態としてリストすることを期待しています。このように、プロセスは(私は願っています)「うまく」ポーリングします。しかし、それは起こりません。現時点で私は
while (state == BUSY) {
sleep(1);
state = check_state();
}
これは完全に受け入れられますが、これよりもうまくいくと思います。これを行うための標準的な方法はありますか?