使用C++的单个生产者和多个消费者
Single producer and multiple consumer using C++
我使用C++,有一个简单的client.exe,当传递文件名时,它会处理它并返回成功或错误代码。我想创建一个Windows C++.exe,它可以执行以下操作,并正在寻找示例代码:
- 启动4(或x)client.exe作为单独的进程(例如使用CreateProcess)
- 当文件列表不为空时将工作发送给客户端:每个客户端都将处理一个发送的文件名,并返回其中一个成功
或错误代码 - 一旦要处理的文件列表为空(或生产者.exe关闭),请关闭
4个客户端(因此它们关闭)
我对此做了一些研究,发现管道可以用于进程之间的通信。我发现了这个用c++在服务器和客户端之间进行通信的示例应用程序:https://code.msdn.microsoft.com/windowsapps/CppNamedPipeServer-d1778534
然而,示例应用程序确实会将请求从客户端发送到服务器并获得响应,我想修改它,或者使用不同的示例应用程序通过具有一个公共的工作队列(或存储该队列或一批工作的管道)来进行批处理,并将工作发送到客户端。我想同步这项工作,这样一旦客户端处理完一个文件,我就会向它发送另一个文件进行处理。
基本上,我想创建一个示例application.exe来启动多个客户端,并通过进程间通信发送它们的工作。任何示例C++代码都可以做到这一点,我们将不胜感激。
感谢
Jeff Lacoste
您可以看看boost。它有boost::interprocess,在这里你可以阅读很多关于IPC方法的想法。
我个人从不使用boost::interprocess
,因为我是boost::asio的超级粉丝,就像出于您的目的一样,它拥有您需要的一切(除了创建流程)。
在谷歌上还有很多可以找到的东西,而且它完全是基于意见的,使用什么库或直接使用本机操作系统API,这就是为什么我想知道这个问题还没有结束。
至于您提供"代码示例"的请求,这2个链接包含您列出的关于IPC的所有内容的示例,并且它是开源的,因此您可以查看库如何与本机操作系统API通信。
- 消费者和生产者问题的双重缓冲
- 如何降低生产者获得锁的可能性,而消费者在使用std::condition_variable时无法获得锁?
- C++ deque 消费者总是从生产者那里得到空队列
- C++多线程生产者-消费者问题
- 生产者和消费者优化
- 特定的生产者-消费者方案
- 为什么condition_variable在等待生产者-消费者的锁定?C++
- 将生产者/消费者与障碍同步
- 单个生产者/多个消费者死锁
- 带有共享缓冲区的两个等待线程(生产者/消费者)
- C++简单的消费者生产者问题
- 生产者/消费者,消费者线程从未执行过
- 在使用 pthread 和信号量实现生产者-消费者问题时需要帮助
- 如何在 c++ 中使用 winapi 事件解决生产者-消费者
- C++生产者消费者陷入僵局
- 简单生产者和消费者的unique_lock困难
- 生产者消费者实现中的条件变量应如何初始化
- 如何实现消费者生产者,消费者可以请求新的数据
- c++中的消费者/生产者
- 如何同步线程(消费者/生产者)