计数信号量初始化为n

时间:2013-02-11 10:05:43

标签: concurrency synchronization operating-system semaphore locks

如果将计数信号量初始化为n,是否意味着n个进程可以同时运行其关键部分?

3 个答案:

答案 0 :(得分:2)

基本上,是的。

请记住,计数信号量只会在递减后计数为负时阻止。因此,信号量可以在阻塞之前递减n次。由于所有递减必须与增量匹配,因此,假设每个进程仅递减一次信号量(这是迄今为止最常见的情况),则是,n个进程将能够同时运行其关键部分

答案 1 :(得分:1)

没有

如果n> 0,那么这意味着计数信号量可以在请求上下文阻塞之前准确地进行n次,并等待计数信号量变为可用(假设没有人在该时间段内给出它)。

如果n <= 0,则表示在任何人成功获取该计数信号量之前,必须给出(1 - n)次计数信号量。

通过互斥锁通常可以更好地控制对关键部分的访问。

答案 2 :(得分:0)

是的,如果你已经将信号量初始化为N,那么sem_wait将不会阻塞任何线程,除非它已被调用N次,然后只有信号量变为-ve,并且当调用sem_wait的任何线程阻塞时。

对于关键部分,您必须使用二进制信号量或互斥量。