c - 用于 win32/C 的线程生产者/消费者的阻塞队列

标签 c multithreading winapi

我正在尝试用自定义队列替换一些线程通信,生产者目前正在使用 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/

相关文章:

ios - 无法访问 dispatch_async : "Variable is not Assignable (missing _block type specifier)" 中的全局变量

java - 同步集合 getter

c++ - 大解空间的多线程搜索

C++:ReadProcessMemory() 导致崩溃

Windows:作为服务运行时查找屏幕分辨率

c - 在不使用 + 号的情况下添加两个数字

c - 光线追踪球形纹理

C - 函数内结构数组的多个 malloc

c - 释放动态分配的内存(双/三指针)

c++ - 为什么这个循环会破坏我的内存?