如果将计数信号量初始化为n,是否意味着n个进程可以同时运行其关键部分?
答案 0 :(得分:2)
基本上,是的。
请记住,计数信号量只会在递减后计数为负时阻止。因此,信号量可以在阻塞之前递减n次。由于所有递减必须与增量匹配,因此,假设每个进程仅递减一次信号量(这是迄今为止最常见的情况),则是,n个进程将能够同时运行其关键部分
答案 1 :(得分:1)
没有
如果n> 0,那么这意味着计数信号量可以在请求上下文阻塞之前准确地进行n次,并等待计数信号量变为可用(假设没有人在该时间段内给出它)。
如果n <= 0,则表示在任何人成功获取该计数信号量之前,必须给出(1 - n)次计数信号量。
通过互斥锁通常可以更好地控制对关键部分的访问。
答案 2 :(得分:0)
是的,如果你已经将信号量初始化为N,那么sem_wait将不会阻塞任何线程,除非它已被调用N次,然后只有信号量变为-ve,并且当调用sem_wait的任何线程阻塞时。
对于关键部分,您必须使用二进制信号量或互斥量。