【发布时间】:2010-11-16 03:57:39
【问题描述】:
我希望在 Win32 上使用 POSIX 样式的条件变量。我有一些代码需要在 XP 上运行,所以我不能使用 Vista/Server 2008 的CONDITION_VARIABLE。
目前它使用了一个伪条件变量类,它基于离开临界区并发出一个自动重置事件来发出信号/唤醒。为了等待条件变量,它离开临界区,WaitForSingleObjects 在事件上,然后重新进入临界区。这大部分都很好,但它不支持广播,并且可能还有其他关于公平性的问题,我不太关心。
我们确实使用了 boost,所以我知道我可以使用 boost 线程或 pthreads-win32,它们支持条件变量,但理想情况下,我希望接口能够在 Microsoft 实现时/如果它变为可以直接使用。我见过Strategies for Implenting POSIX Condition Variables on Win32,但“最好的”(最正确的)解决方案使用互斥锁而不是CRITICAL_SECTION。在second part 中有一个带有CRITICAL_SECTION 的实现草图,但它并不完整,由于文章中为它们概述的问题,带有CRITICAL_SECTIONs 的其他解决方案让我很担心。
简而言之,我如何在 win32 上为关键部分实现正确但不一定公平(但那会很好)的条件变量,以便我可以在 Microsoft 的实现对我可用时放弃它?
【问题讨论】:
标签: c winapi multithreading