windows server 2003 中的条件变量选项

Posted

技术标签:

【中文标题】windows server 2003 中的条件变量选项【英文标题】:options for condition variable in windows server 2003 【发布时间】:2013-05-14 09:44:16 【问题描述】:

Windows Server 2003/Win Xp 不支持条件变量,在 win server 2003 中条件变量的功能还有哪些其他选项?

【问题讨论】:

要么您选择不支持 Windows XP,要么您必须应对操作系统提供的功能,如果前者不是一个选项。 @MichaelWalz 我正在寻找条件变量的替代品...有吗? 您可以从已经存在的原语中构建条件变量。请参阅 boost 对 boost::thread::condition_variable 的实现。 Documentation, Source @gimpf 不只是“看”,使用。 你说得非常正确。 【参考方案1】:

关键部分、互斥体、信号量、事件。 Windows 具有所有常用的同步原语。

【讨论】:

不,为什么?这是一个有用的答案。一个事件是一个条件变量,如果你想这样看待它——只是少糖。 所有常用的同步原语?重要的原语是互斥体和条件变量;其他的可以从它们合成(但如果直接在内核中实现可能会更有效)。在那之后,最有用的是 rwlock。 -1:Windows 事件肯定不是条件变量。 OP专门询问条件变量。请参阅cs.wustl.edu/~schmidt/win32-cv-1.html,了解使用 Event 实现类似条件变量的功能有多难。条件变量的价值在于它们原子地释放互斥体并开始等待。试图用事件模拟这一点而不遇到微妙的错过信号比赛真的很难。 ..这就是为什么我考虑改为评论的原因。 “重要的原语是互斥体和条件变量”至少是有争议的。信号量和互斥锁在我使用的每一个多任务操作系统上都可用......永远。对于条件变量来说,这比可以说的要多——一种类似监视器的构造,在某些操作系统上,它实际上往往不能正常工作。 Windows 信号量、临界区和互斥锁不会受到虚假唤醒(AKA '虚假故障')的影响。 虚假唤醒是一个红鲱鱼。它是solved in C++11,并且无关紧要,因为您需要 while 循环(隐式或显式)以任何方式测试您的不变量。但这艘船已经航行了。 C++11 委员会和 pthreads 委员会都选择条件变量而不是信号量或事件。 ***.com/questions/70773/… 就是一个很好的例子。 Cvar 在开始/结束等待的同时以原子方式释放/获取互斥锁。信号量和事件不会。

以上是关于windows server 2003 中的条件变量选项的主要内容,如果未能解决你的问题,请参考以下文章

Server-U在Windows Server 2003中的详细配置

Windows Server 2003建立"域"之后怎样添加域成员?

Windows Server 2003

Windows server 2003 WINS的配置和使用详解

在 Windows Server 2003 上托管 WCF Web 服务

Windows Server 2003服务器无法下载.exe文件的解决方法