最近、私はこの問題を最初のリーダライタの問題とよく似ています。「セマフォを使用してNプロセスバリアを実装する」への変更
Implementing an N process barrier using semaphores
私はそれを再利用し、正常に動作することができることを確認しましたし、それを修正しようとしています。
n = the number of threads
count = 0
mutex = Semaphore(1)
barrier = Semaphore(0)
mutex.wait()
count = count + 1
if (count == n){ barrier.signal()}
mutex.signal()
barrier.wait()
mutex.wait()
count=count-1
barrier.signal()
if(count==0){ barrier.wait()}
mutex.signal()
これは間違いありませんか?
私が検出しなかったいくつかの間違いが存在するかどうかは疑問です。
ありがとうございます!もし私が別のセマフォー "size = semaphore(n)"とsize.wait()を使ってエントリーをコントロールするとどうなりますか? "if(count == 0){for(i = 1〜n){size.signal()} "を使用してリフレッシュします。そうですか? –
私はそれがうまくいくはずだと思います。 –