【问题标题】:Counting semaphores initialized to n计数信号量初始化为 n
【发布时间】:2013-02-11 10:05:43
【问题描述】:

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

【问题讨论】:

    标签: concurrency synchronization operating-system semaphore locks


    【解决方案1】:

    基本上是的。

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

    【讨论】:

    • 这不是破坏信号量的目的吗?互斥?还是计数信号量总是应该初始化为 1?
    • 信号量的目的是允许 n 次获取,所以根据定义,不,它不会破坏目的。如果你想要一个互斥信号量,是的,它会 - 在这种情况下定义一个信号量(1)。 or are counting semaphores always supposed to be initialized to 1? 仅当您需要互斥时
    【解决方案2】:

    没有。

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

    如果 n

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多