27

私は現在、以前の反復で OS 試験のトレーニングを行っていますが、これに遭遇しました。

「N Process Barrier」を実装します。つまり、それらのグループの各プロセスが、それぞれの実行のある時点で、他のプロセスが特定のポイントに到達するまで待機するようにします。

次の ops を利用できます。

init(sem,value), wait(sem) and signal(sem)

N は任意の数です。特定の数のプロセスで機能するように作成できますが、任意の数では機能しません。

何か案は?疑似コードで返信しても構いません。これは課題ではなく、個人的な勉強です。

4

3 に答える 3

47

これはThe Little Book of Semaphoresでよく紹介されています。

n = the number of threads
count = 0
mutex = Semaphore(1)
barrier = Semaphore(0)


mutex.wait()
count = count + 1
mutex.signal()

if count == n: barrier.signal() # unblock ONE thread

barrier.wait()
barrier.signal() # once we are unblocked, it's our duty to unblock the next thread
于 2011-06-13T15:21:16.120 に答える