【问题标题】:How are condition variables implemented?条件变量是如何实现的?
【发布时间】:2010-02-23 05:14:28
【问题描述】:

这让我困惑了很久。

鉴于比较和交换等基本原子原语,我可以了解如何实现自旋锁(我可以从中构建互斥锁)。

但是,我不知道如何从中构建条件变量。这是怎么做到的?

【问题讨论】:

    标签: mutex conditional-statements compare-and-swap


    【解决方案1】:

    这并不是特别简单。以下是 Douglas Schmidt(他也主要负责 ACE 库)的一篇论文的链接,该论文详细介绍了使用 Win32(Vista 之前)中可用的同步原语在 Windows 上实现条件变量的几种方法。这些方法包括仅使用任何操作系统原语上普遍可用的基本方法,并讨论了这些方法的各种限制:

    底线(结束语):

    本文说明了为什么在 Win32 平台上开发条件变量很棘手且容易出错。开发人员必须解决一些微妙的设计力量。一般来说,我们检查过的不同实现会根据它们的正确性、效率、公平性和可移植性而有所不同。没有一种解决方案能以最佳方式提供所有这些品质。

    如果公平至上,第 3.4 节中的SignalObjectsAndWait 解决方案是一个很好的方法。但是,这种方法不如其他解决方案高效,也不便携。因此,如果效率或可移植性比公平更重要,那么第 3.2 节中描述的SetEvent 方法可能更合适。自然,最简单的解决方案是 Microsoft 只需在 Win32 API 中提供条件变量。

    请注意,从 Vista 开始,Windows 支持使用原生 API 的条件变量:

    【讨论】:

    猜你喜欢
    • 2012-06-15
    • 2011-07-18
    • 2010-10-30
    • 1970-01-01
    • 2020-09-07
    • 2010-11-16
    • 2017-05-13
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多