Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 生产者-消费者(C+)+;使用Boost库_C++_Multithreading_Boost_Boost Asio - Fatal编程技术网

C++ 生产者-消费者(C+)+;使用Boost库

C++ 生产者-消费者(C+)+;使用Boost库,c++,multithreading,boost,boost-asio,C++,Multithreading,Boost,Boost Asio,我正在尝试设计和实施一个程序,它将“解决”经典的生产者-消费者问题。我还将使用发布/订阅模式,并且只有一个生产者 我想到的第一件事是将每件事情作为一个单独的线程来实现,但后来我意识到这是低效的,可能有更聪明的方法来实现 我需要: 接受来自客户端的tcp/ip连接 使用另一个进程中的命名管道获取数据(此处命名管道可以更改为任何其他内容) 一旦我得到数据,就决定哪些客户应该得到数据并发送到那里 能够随时解析客户端命令(例如,客户端希望更改订阅详细信息) 另外,根据实现细节,我可能希望清除包含传入数

我正在尝试设计和实施一个程序,它将“解决”经典的生产者-消费者问题。我还将使用发布/订阅模式,并且只有一个生产者

我想到的第一件事是将每件事情作为一个单独的线程来实现,但后来我意识到这是低效的,可能有更聪明的方法来实现

我需要:

  • 接受来自客户端的tcp/ip连接
  • 使用另一个进程中的命名管道获取数据(此处命名管道可以更改为任何其他内容)
  • 一旦我得到数据,就决定哪些客户应该得到数据并发送到那里
  • 能够随时解析客户端命令(例如,客户端希望更改订阅详细信息)
  • 另外,根据实现细节,我可能希望清除包含传入数据的集合(如果我需要的话)并启动非活动客户端
我现在的想法是:

  • 创建一个线程,该线程将接受来自客户端的连接,并将每个客户端添加到列表中
  • 创建一个线程/线程池,这些线程将执行一个串(
    boost::strand
    ),该串将包括从源读取数据、决定哪个客户端应获取数据以及将数据异步写入客户端
我不知道

  • 这是有效的方法
  • 这是一种有效的方法
  • 如何从客户端添加读取命令
  • 如何检查客户端不活动

如果您能就如何正确实施此类措施提出任何意见和建议,我将不胜感激

我觉得这个问题虽然提出得很好,格式也很好,结构也很合理,但对于这样的问题来说,它有点太开放了。有什么建议可以改进吗?也许可以把它转移到其他StackExchange站点?我建议你建立一个聊天室或各种各样的邮件列表,在那里你可以进行讨论。你不会得到一个让你满意的答案。我发现这个问题更适合程序员。stackexchange.com,所以我将把它移到那里。请不要。我已经说过,这是一个讨论的请求,不是一个有答案的问题。