我正在尝试用自定义队列替换一些线程通信,生产者当前正在使用
PostThreadMessage,消费者正在使用WaitForSingleObject/PeekMessage。
http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html这将是我所需要的,但 boost 和 C++ 都不是一个选择。
不想重新实现轮子,有人用 C 实现了这样的队列吗?
使用 IO 完成端口(参见here http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx) 作为您的队列;它们不需要只与 I/O 操作相关,并且由于可以设置内核来限制线程池中运行的线程数量,因此非常易于使用且性能良好。
基本上你打电话PostQueuedCompletionStatus()
将项目放入队列并GetQueuedCompletionStatus()
把它们脱掉。您无需担心同步等问题。
如果您需要更多帮助才能使其正常工作,那么您可以看看我的免费的高性能服务器框架 http://www.serverframework.com/products---the-free-framework.html其中包含相当多的 IOCP 代码,包括与 I/O 没有任何关系的独立线程池。请注意,这是用 C++ 编写的,但它应该能让您很好地了解 C API 如何结合在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)