セマフォとその操作に関するテキストを読んでいました。wait()
著者は、セマフォのおよび操作はアトミックに実行する必要があることを強調しましたpost()
。そうしないと、スレッドの相互排除に違反する可能性があります。誰か、彼の意味を説明してくれませんか? ちなみに、マルチスレッドは初めてです
質問する
716 次
2 に答える
0
はい、セマフォwait()
の操作がアトミックに実行されない場合、post()
スレッドの相互実行に違反する可能性があります。
たとえば、値S = 1
とプロセスP1
を持つセマフォを考えて、以下のように同時にP2
実行しようとすると、wait()
時間T0
、T1
プロセスはP1
、それぞれP2
セマフォの値を見つけ、S = 1
続いてセマフォをデクリメントしてロックを取得し、同時にスレッドの相互実行に違反してクリティカルセクションに入ります。
ロックが取得されるまでの 間wait()
とpost()
スピンロックの間に原子性を採用することをお勧めします。
于 2012-12-22T18:48:51.400 に答える