在 C++ 中使用互斥锁和条件变量实现带有信号的监视器
Posted
技术标签:
【中文标题】在 C++ 中使用互斥锁和条件变量实现带有信号的监视器【英文标题】:Implementing Monitor with signaling using mutex and condition variable in C++ 【发布时间】:2009-07-31 07:09:20 【问题描述】:是否有任何机构使用 C++ 中的互斥锁和条件变量实现了带有信号(唤醒等待线程)的 Monitor。
我不知道如何开始。任何示例代码或在线文章都会很棒。 有没有实现这些的开源库?
我需要 windows 和 linux。但是从 windows(win32) 开始就可以了。
【问题讨论】:
抱歉,您的问题是什么,为互斥锁和条件编写一些可移植代码或学习如何使用它们? 我想要在 C++ 中使用互斥锁和条件变量的带有信号的监视器类。我自己编写一个监视器类既困难又耗时。我确信有人会实施它,但找不到它。所以我发布了这个问题。 【参考方案1】:This Qt Quarterly article 解释了如何使用 Qt 的 QMutex 和 QWaitCondition 来做到这一点。但是你应该能够用你想使用的任何互斥类重新实现它..
另请参阅here..中的更高级示例。
【讨论】:
+1 非常清晰的文章,并且很容易应用到其他工具包中【参考方案2】:查看boost::thread::condition_variable 以及示例。 它可用于等待有或没有超时的条件。我认为这是一个相当优雅的解决方案,在这种情况下应该完全满足您的需求,并以可移植的方式完成。
【讨论】:
【参考方案3】:Mozilla 的平台抽象库NSPR (Netscape Portable Runtime)有一个跨平台的监视器抽象。这是一个“真正的”实现(例如实际上在 Firefox 中使用),所以它并不简单。但它是一个监视器。
来源:prmon.c,prmon.h
文档:prmon.html
【讨论】:
【参考方案4】:我在这里为 posix 系统制作了一个:http://asgaard.homelinux.org/svn/cpp/threadqueue/ 这里有一个 C 变体:http://asgaard.homelinux.org/wordpress/?p=9
【讨论】:
【参考方案5】:我在 C++ 中完成的所有线程编程都使用了 pthread,它具有您需要的基本构建块。这个article 讨论了将这些构建块用于监视器
由于某种原因链接不起作用,将相同的 URL 粘贴到浏览器中即可。
http://findarticles.com/p/articles/mi_m0VVT/is_10_2/ai_n24998136/
【讨论】:
以上是关于在 C++ 中使用互斥锁和条件变量实现带有信号的监视器的主要内容,如果未能解决你的问题,请参考以下文章