Operating system 使用信号量实现N进程屏障
我目前正在进行操作系统考试的培训,我遇到了以下问题: 实施“N流程壁垒”,即 是的,确保每个过程 一群人在某处等待 在其各自的执行中,例如 其他的过程,以达到他们的目标 给定点 你有以下几点 可供选择的老年退休金计划:Operating system 使用信号量实现N进程屏障,operating-system,computer-science,semaphore,systems-programming,barrier,Operating System,Computer Science,Semaphore,Systems Programming,Barrier,我目前正在进行操作系统考试的培训,我遇到了以下问题: 实施“N流程壁垒”,即 是的,确保每个过程 一群人在某处等待 在其各自的执行中,例如 其他的过程,以达到他们的目标 给定点 你有以下几点 可供选择的老年退休金计划: init(sem,value)、wait(sem)和signal(sem) N是一个任意数。我可以使它适用于给定数量的进程,但不适用于任何数量的进程 有什么想法吗?可以用伪代码回答,这不是作业,只是个人学习。这在中有很好的介绍 使用N个信号量。不太确定 semaphore bar
init(sem,value)、wait(sem)和signal(sem)
N是一个任意数。我可以使它适用于给定数量的进程,但不适用于任何数量的进程
有什么想法吗?可以用伪代码回答,这不是作业,只是个人学习。这在中有很好的介绍
使用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])
信号量barr[N]
信号量excl=1
整数计数=0
int i=1
而(i2个障碍信号灯,但不确定
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])
信号量barr[0..1]#两个信号量:barr[0]和barr[1]
信号量excl=1
整数计数=0
int whichOne=0#选择信号量以避免竞争条件
barr[0]=0#初始化
巴尔[1]=0
#样本使用
每个线程的int current#local
等待(不包括)
电流=whichOne
计数=计数+1
如果(计数=N)
int j=1
虽然(jThanks!我想到了一个非常接近的方法。最好将if count…
放在互斥块中,以确保它只被输入一次吗?从现在的情况看,你可能会输入两次。nvm-看了看这本小书,它可以被发送两次信号,因为这个屏障没有被重用,所以它是fi只要完成了目标,nal状态就无关紧要。举个例子:假设线程5获取互斥体,递增计数并释放互斥体。现在调度程序切换到另一个线程,该线程再次获取互斥体,递增计数并释放互斥体。计数现在为6,屏障将永远不会向其线程发出信号。Upvoted提供了一本关于信号灯的小书。太棒了!谢谢!这会遇到一个错误。应该是while(i
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])