1

如果一个计数信号量被初始化为 n,这是否意味着 n 个进程可以同时运行它们的临界区?

4

3 回答 3

2

本质上,是的。

请记住,计数信号量仅在递减后计数为负时才会阻塞。因此,信号量可以在阻塞前递减 n 次。由于所有减量都必须与增量相匹配,那么,假设每个进程只减量信号量一次(这是迄今为止最常见的情况),那么是的,n 个进程将能够同时运行它们的临界区.

于 2013-02-11T10:08:15.253 回答
1

不。

如果 n > 0,则意味着计数信号量可以在请求上下文阻塞之前恰好 n 次被获取并等待计数信号量变得可用(假设在此期间没有人提供它)。

如果 n <= 0,则意味着必须给出计数信号量 (1 - n) 次,然后任何人才能成功获取该计数信号量。

控制对关键部分的访问通常由互斥锁更好地处理。

于 2013-02-12T13:53:04.040 回答
0

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

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

于 2015-05-25T18:04:55.190 回答