web-dev-qa-db-ja.com

セマフォを使用したNプロセスバリアの実装

私は現在、以前の反復でOS試験のトレーニングをしており、これに遭遇しました:

「Nプロセスバリア」を実装します。つまり、グループの各プロセスが、それぞれの実行のある時点で、他のプロセスが指定されたポイントに到達するのを待機します。

次のopsが利用可能です。

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

Nは任意の数です。特定の数のプロセスでは機能するが、任意の数では機能しないようにすることができます。

何か案は?疑似コードで返信しても問題ありません。これは課題ではなく、個人的な研究です。

22
F. P.

これは 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
42
cnicutar

Nセマフォの使用。よくわからない...

semaphore barr[N]
semaphore excl=1
int count=0

int i=1
while (i<=N)
   barr[i]=0 #initialization
   i=i+1

# use, each thread (tid)
wait(excl)
count=count+1
if (count==N)
   int j=1
   while (j<=N)
       signal(barr[j])
       j=j+1
   count=0
signal(excl)
wait(barr[tid])
2
Sergio.Uma