【问题标题】:where can I use counting semaphore in linux threads?我在哪里可以在 linux 线程中使用计数信号量?
【发布时间】:2014-01-01 17:22:47
【问题描述】:

我正在尝试了解计数信号量的应用。我可以看到,一般来说,线程中存在竞争条件。为避免此类问题,我们使用互斥。我们总是只需要一个线程来读取公共资源,其他线程应该被阻塞。这样,我们序列化了公共资源的访问。但是,我无法理解,我可以使用计数信号量的场景应该是什么?请给我一个好的用例。

【问题讨论】:

  • 谷歌不适合你吗?请阅读 FAQHow to Ask 以获取有关编写符合 SO 站点指南的问题的提示。

标签: linux multithreading pthreads posix


【解决方案1】:

计数信号量最常见的用途是分配具有多个但有限可用性的资源,如stark 所述。

它们还可以用于构建障碍和读取器/写入器锁。在屏障中,您希望 N 个线程中的每一个都达到某个点,然后才能继续进行。例如,赛马的开始。使用 r/w 锁,您有多个读者和一个作者。您可以看到计数信号量如何有助于创建这些信号量。

【讨论】:

    【解决方案2】:

    在一般情况下,您有 T 个线程访问 R 资源,其中 T > R。您使用初始化为 R 的计数信号量来授予线程对资源的访问权限。一个例子是多处理器图形子系统,其中 R 是处理器的数量。

    请注意,计数信号量有两个用途。计数表示空闲资源的数量。原子减量操作返回的值是获取资源的索引或令牌。

    【讨论】:

    • 如果每个线程都被授予访问共享对象的权限,那么它可以创建竞争条件,不是吗?我无法理解用例,请详细说明或任何简单的示例。
    • 没有竞争,因为信号量的每个值都只授予对一个处理器的访问权限(在上面的示例中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多