C++ windows server 2003中条件变量的选项

C++ windows server 2003中条件变量的选项,c++,multithreading,winapi,C++,Multithreading,Winapi,Windows Server 2003/Win Xp不支持条件变量,Win Server 2003中条件变量功能的其他选项有哪些?关键部分、互斥体、信号量、事件。Windows具有所有常用的同步原语。要么选择不支持Windows XP,要么必须处理操作系统提供的功能,如果前者不支持的话。@MichaelWalz我正在寻找条件变量的替代方案……是否有?您可以用已经存在的原语构建条件变量。请参阅boost对boost::thread::condition_变量的实现@gimpf不仅仅是“看”,使用。

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

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

要么选择不支持Windows XP,要么必须处理操作系统提供的功能,如果前者不支持的话。@MichaelWalz我正在寻找条件变量的替代方案……是否有?您可以用已经存在的原语构建条件变量。请参阅boost对boost::thread::condition_变量的实现@gimpf不仅仅是“看”,使用。你在这方面非常正确。不,为什么?这是一个有用的答案。一个事件是一个条件变量,如果你想这样看的话——只是用更少的糖。所有通常的同步原语?重要的原语是互斥体和条件变量;其他的可以从它们合成(但是如果直接在内核中实现,可能会更有效)。除此之外,最有用的是rwlock。-1:Windows事件肯定不是条件变量。OP特别询问条件变量。请参阅,了解使用事件实现类似条件变量的功能有多困难。条件变量的值是它们原子地释放互斥并开始等待。试图用事件来模拟这一点,而不陷入微妙的信号缺失竞争,这真的很难……这就是为什么我考虑改为评论的原因。“重要的原语是互斥体和条件变量”至少是有争议的。信号量和互斥量在我使用的每个多任务操作系统上都是可用的,因为。。。永远。这比条件变量要多得多,条件变量是一种类似于监视器的结构,在某些操作系统上,它往往无法正常工作。Windows信号量、关键部分和互斥对象不会受到虚假唤醒的影响(也称为“虚假故障”)。虚假唤醒是一种误导。它是,并且是无关的,因为您需要while循环(隐式或显式)以任何方式测试不变量。但这艘船已经开航了。C++11委员会和pthreads委员会都选择条件变量而不是信号量或事件。这是一个很好的例子。Cvars在启动/完成等待的同时自动释放/获取互斥。信号量和事件不会。