当前位置: 首页 > 知识库问答 >
问题:

具有Qt信号/插槽的生产者/消费者

锺离声
2023-03-14

我正在编写一个程序,其中几个生产者生成一些应该由几个消费者处理的数据。由于每条数据的消耗大约需要100ms,而目标平台有很多处理器,所以在我看来,每个生产者和每个消费者都得到自己的线程似乎是很自然的。我的问题是:Qt信号/插槽是将数据块从生产者传递到消费者的好方法吗?还是建议更好的解决方案(强烈首选Qt)。

为了防患于未然,制作者每小时产生几十万个数据。

共有1个答案

寿子轩
2023-03-14

我认为信号/时隙机制在这里并不合适,因为每个信号都分配给所有连接的时隙。这意味着,如果您使用信号/插槽机制作为您的“工作队列”,您不会在使用者上得到任何负载分配,而是所有使用者都可以执行相同的(重复的)工作。

更好的机制是使用容器作为工作队列(生产者向容器中添加项,使用者移除它们),使用QMutex来避免并发问题,使用一个QWaitCondition来在没有工作时阻止使用者(如果您想要施加最大大小,也可以使用两个QWaitCondition)。

 类似资料:
  • 本文向大家介绍使用信号量的生产者消费者问题,包括了使用信号量的生产者消费者问题的使用技巧和注意事项,需要的朋友参考一下 生产者消费者问题是同步问题。有一个固定大小的缓冲区,生产者生产商品并将其输入缓冲区。消费者从缓冲区中删除项目并消费它们。 当消费者从缓冲区中消费商品时,生产者不应将商品生产到缓冲区中,反之亦然。因此,缓冲区只能一次由生产者或使用者访问。 生产者消费者问题可以使用信号量解决。生产者

  • 问题内容: 我需要编写一个类似于生产者- 消费者的问题,必须使用信号量。我尝试了几种解决方案,但都无济于事。首先,我在Wikipedia上尝试了一个解决方案,但没有成功。我当前的代码是这样的: 使用者的方法运行: 生产者的方法运行: 在上面的代码中,发生了一个消费者线程读取一个位置,然后另一个线程读取了相同位置而没有生产者填充该位置的情况,如下所示: 问题答案: 似乎您使用的是互斥锁而不是信号灯?

  • 我已经使用Qt线程实现了生产者/消费者模式。多个生产者线程生成由消费者组合的数据。使用信号/时隙和排队连接实现通信。只要使用者能够比生产者线程更快地消耗数据,这就可以正常工作。 很难使我的代码缩放。特别是增加生产者的数量很容易,但很难产生一个以上的消费线程。 现在,当在具有许多内核的CPU/系统上运行软件时,问题就出现了。在这种情况下,我使用更多的线程来产生数据。有时会发生(取决于数据生成的复杂性

  • 我应该在两个子进程中获得信号量ID…还是缺少其他东西。

  • 本教程演示了如何发送和接收来自Spring Kafka的消息。 首先创建一个能够发送消息给Kafka主题的Spring Kafka Producer。 接下来,我们创建一个Spring Kafka Consumer,它可以收听发送给Kafka主题的消息。使用适当的键/值序列化器和解串器来配置它们。 最后用一个简单的Spring Boot应用程序演示应用程序。 下载并安装Apache Kafka 要

  • 生产者线程与消费者线程使用信号量同步 生产者线程与消费者线程使用信号量同步 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the f