operating system - sistemas - Implementando una barrera de proceso N usando semáforos
semaforos sistemas operativos ejemplos (3)
Esto está bien presentado en 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
Actualmente estoy entrenando para un examen del sistema operativo con iteraciones anteriores y me encontré con esto:
Implemente una "Barrera de proceso N", es decir, asegurándose de que cada proceso de un grupo de ellos espere, en algún momento de su ejecución respectiva, para que los otros procesos lleguen a su punto determinado.
Usted tiene las siguientes operaciones disponibles:
init(sem,value), wait(sem) and signal(sem)
N es un número arbitrario. Puedo hacerlo para que funcione para un número determinado de procesos, pero no para ningún número.
¿Algunas ideas? Está bien responder con el pseudo-código, esto no es una tarea, solo un estudio personal.
Solo 2 semáforos de barrera, pero no estoy seguro ...
semaphore barr[0..1] # two semaphores: barr[0] and barr[1]
semaphore excl=1
int count=0
int whichOne=0 # select semaphore to avoid race conditions
barr[0]=0 #initialization
barr[1]=0
# sample use
int current #local for each thread
wait(excl)
current=whichOne
count=count+1
if (count==N)
int j=1
while (j<=N)
signal(barr[current])
j=j+1
count=0
whichOne=1-whichOne # swap barrier to avoid race conditions
signal(excl)
wait(barr[current])
Usando N semáforos. No estoy muy seguro ...
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])