2010-02-23 36 views
2

这让我很困惑。条件变量是如何实现的?

给定基本原子基元像比较&交换,我可以看到如何实现自旋锁(从中我可以建立互斥锁)。

但是,我没有看到我可以如何建立条件变量。这是如何完成的?

回答

2

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

底线(结束语):

本文阐述了为什么在Win32平台上开发条件变量很棘手且容易出错。有几个微妙的设计力量必须由开发人员解决。总的来说,我们研究的不同实现根据其正确性,效率,公平性和可移植性而有所不同。没有一个解决方案能够最佳地提供所有这些品质。

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

注意,开始在Vista中,Windows使用原生API支持条件变量