【发布时间】:2013-02-11 10:05:43
【问题描述】:
如果一个计数信号量被初始化为 n,是否意味着 n 个进程可以同时运行它们的临界区?
【问题讨论】:
标签: concurrency synchronization operating-system semaphore locks
如果一个计数信号量被初始化为 n,是否意味着 n 个进程可以同时运行它们的临界区?
【问题讨论】:
标签: concurrency synchronization operating-system semaphore locks
基本上是的。
请记住,计数信号量只会在递减后计数为负数时阻塞。因此,信号量可以在阻塞前递减 n 次。由于所有减量必须与增量相匹配,那么,假设每个进程只减量信号量一次(这是迄今为止最常见的情况),那么是的,n 个进程将能够同时运行它们的临界区.
【讨论】:
or are counting semaphores always supposed to be initialized to 1? 仅当您需要互斥时
没有。
如果 n > 0,则意味着在请求上下文阻塞并等待计数信号量可用(假设在此期间没有人提供)之前,计数信号量可以恰好被取 n 次。
如果 n
控制对关键部分的访问通常由互斥锁更好地处理。
【讨论】:
是的,如果你已经将 semaphore 初始化为 N,那么 sem_wait 不会阻塞任何线程,除非它已经被调用了 N 次,然后只有 semaphore 变成 -ve,这就是任何调用 sem_wait 的线程阻塞的时候。
对于关键部分,您必须使用二进制信号量或互斥锁。
【讨论】: