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 WINS的配置和使用详解