gpt4 book ai didi

c++ - boost::strand 生产者/消费者有意义吗?

转载 作者:行者123 更新时间:2023-11-30 04:14:04 28 4
gpt4 key购买 nike

this blog post (2010) ,有人试图使用 Boost::strand 工具解决生产者/消费者问题。我感觉他没有捕获要点,他的程序从来没有同时运行一些生产者和一些消费者,但我不是 boost 库的专家,无法对此充满信心。

  • 他只有一条链,producer()consumer() 调用都由一些计时器调度;
  • 他有两个线程,都调用了 io_service::run()

但是,只有一个线程可以保证“这些处理程序都不会同时执行”也意味着我们将或者一次生成或者,而我想说没有什么可以阻止生产者生产单位 U+t 而消费者使用单位 U,对吗?

   void producer_consumer::producer() {
if ( count_ < num) {
++count_;
intvec_.push_back(count_);
std::cout << count_ < " pushed back into integer vector." << std::endl;
timer1_.async_wait(strand_.wrap(
boost::bind(&producer_consumer::producer, this))); // loops back
timer2_.async_wait(strand_.wrap(
boost::bind(&producer_consumer::consumer, this))); // start consumer
}
}

或者我错过了这样一个事实,即会有一些 File::async_read() 接受一个 strand-wrapped-"produce"函数作为完成回调和一个类似的 Socket::ready-to-再写一次,这将解释他的提议只要“生产者()”和“消费者()”实际上是与共享缓冲区接口(interface)的监视器保护部分就有意义?

最佳答案

示例代码更倾向于将strand 演示为同步机制,而不是为producer-consumer problem 提供解决方案。 .

对于使用 strand 解决生产者-消费者问题的激励案例,请考虑使用 TCP 的基于 GUI 的聊天客户端。 GUI 可以生成多条消息,尝试在上一条消息写入连接之前发送一条消息。同时,应用程序需要在保留消息的同时消费并将每条消息写入 TCP 连接,从而导致没有交织数据。组合操作,例如 async_write , 要求流在组合操作完成之前不执行其他写操作。要考虑这些行为:

  • 队列可以缓冲聊天消息。
  • GUI 可以将操作发布到 strand 中,它将:
    • 将聊天消息添加到队列中。
    • 有条件地启动消费者。
  • 消费者是一个异步调用链,它从队列中读取并写入 strand 中的套接字。

参见 this实现的答案。

关于c++ - boost::strand 生产者/消费者有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094920/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com