我正在尝试用自定义队列替换一些线程通信,生产者目前正在使用 PostThreadMessage,消费者正在使用 WaitForSingleObject/PeekMessage。
http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html将是我需要的,但 boost 和 C++ 都不是一个选项。
不想重新实现轮子,有人用 C 实现了这样的队列吗?
最佳答案
使用 IO 完成端口(参见 here)作为您的队列;它们不需要只与 I/O 操作相关,并且由于可以设置内核以限制线程池中运行的线程数的方式,它们非常易于使用并且性能非常好。
基本上,您调用 PostQueuedCompletionStatus()
将项目放入队列中,然后调用 GetQueuedCompletionStatus()
将它们取出。您无需担心同步等问题。
如果您需要更多帮助来让它工作,那么您可以看看我的 free high performance server framework其中包括相当多的 IOCP 代码,包括一个与 I/O 没有任何关系的独立线程池。请注意,这是在 C++ 中,但它应该让您很好地了解 C API 是如何结合在一起的。
关于c - 用于 win32/C 的线程生产者/消费者的阻塞队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2146566/