是否有使用非递归互斥(如)对象的SleepConditionVariableCS()的版本/等价物?

时间:2016-08-04 13:15:40

标签: windows multithreading winapi thread-safety

我正在为Linux应用程序编写Windows端口,我正在尝试找到pthread_cond_wait()的合适替代品。最接近的替代方案似乎是SleepConditionVariableCS()。但是我不愿意使用此函数,因为它使用 CriticalSections ,它们基​​本上是轻量级的递归互斥体。我更喜欢非递归锁定对象替代 - 是否有一个?

P.S。 -

  1. 在代替pthread互斥锁的应用程序中,我使用Semaphores,最大数量为1。
  2. 如果递归互斥锁有问题as stated by David Butenhof那么为什么Windows只提供递归互斥锁(或CriticalSection)作为选项?这是Windows上的一个巨大的#Fail还是David Butenhof过时/错误?

1 个答案:

答案 0 :(得分:2)

Windows Vista及更高版本提供Slim Reader/Writer (SRW) Locks作为非递归锁定对象替代 1

正如文件所述:

  

SRW锁定是指针的大小。优点是更新锁定状态的速度很快。缺点是可以存储非常少的状态信息,因此无法递归获取 SRW锁。此外,在共享模式下拥有SRW锁的线程无法将其锁的所有权升级为独占模式。

Windows条件变量可以使用SRW锁而不是CriticalSection锁。请参阅SleepConditionVariableSRW()

1 :PS。以下是关于recursive locks 的好与坏的另一种观点。