条件变量是如何实现的?
答
这不是特别简单。以下是由Douglas Schmidt撰写的一篇文章的链接(他也主要负责ACE库),详细介绍了几种使用Win32(Vista之前版本)中可用的同步原语在Windows上实现条件变量的方法。该方法包括只使用基本的,一般可用在任何操作系统原语,并讨论了方法的各种限制:
底线(结束语):
本文阐述了为什么在Win32平台上开发条件变量很棘手且容易出错。有几个微妙的设计力量必须由开发人员解决。总的来说,我们研究的不同实现根据其正确性,效率,公平性和可移植性而有所不同。没有一个解决方案能够最佳地提供所有这些品质。
3.4节中的
:SignalObjectsAndWait
解决方案是一个很好的方法,如果公平是最重要的。但是,这种方法并不像其他解决方案那样高效,也不像便携式那样。因此,如果效率或可移植性比公平性更重要,则3.2节中描述的方法可能更合适。当然,最简单的解决方案是微软只需在Win32 API中提供条件变量。
注意,开始在Vista中,Windows使用原生API支持条件变量