私は最近マルチプロセッシングを学んでいますが、私はリソースを使って作業をしているシナリオに遭遇しました。私はそれを再び必要とする前に他の人にそれを使う必要がありますが、再:mutex/semaphoreのロックを解除してすぐにロックします。悪い習慣やそれを行う方法はありますか?
(擬似コード)
while (true) {
mutex_lock(resource);
/* modify resource */
mutex_unlock(resource);
/* wait for someone else to modify resource */
}
問題は、このプロセスは、リソースのロックを解除し、その後すぐにブロックされ、別のプロセスがある場合でも、それを再びロックすることです。 これは、決してCPUをあきらめることがないためです。
私は悪い練習をしていますか?私は、この問題の周りに具体的にコードを設計すること以外は、その周りに道が見えません。 yield
プロセッサをC/C++にする方法はありますか?私は再びロックを取得しないことを保証できますか?
同じロックを待機している複数のスレッドがある場合、1つのスレッドがロックを解除すると、ロックを待機している他のすべてのスレッドはロックされていないスレッドより先になります。だから、この動作はOKです。 server with – bruceg
通常、 'sleep(0)'はこれを行います。オペレーティングシステムが何か良いことを見つけたら、残りの時間量に原則的に放棄します。 –
'pthread' APIを使用していますか? – user3386109