如何使用信号量实现条件变量?

tem*_*def 7 algorithm mutex semaphore condition-variable

前段时间我一直在考虑如何相互实现各种同步原语.例如,在pthreads中,您可以获得互斥锁和条件变量,从中可以构建信号量.

在Windows API(或至少是旧版本的Windows API)中,存在互斥锁和信号量,但没有条件变量.我认为应该可以用互斥量和信号量来构建条件变量,但对于我的生活,我只是想不出办法.

有没有人知道这样做的好建筑?

Mar*_*llo 10

这是微软研究院 [pdf] 的一篇论文,其中涉及到这一点.


mcd*_*lla 0

给定信号量实现 X 的一种方法是向系统添加一个服务器进程,使用信号量与其通信,并让该进程完成实现 X 的所有艰苦工作。作为一项学术练习,这可能是作弊,但它确实完成工作,并且对于客户端进程的不当行为或突然死亡可能更加稳健。