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

boost C++无锁队列与共享队列

傅雪松
2023-03-14

哪里使用无锁数据结构更好,哪里使用基于'mutex'和'condition_variables'的简单实现更好?

共有1个答案

栾和风
2023-03-14

在你的应用程序中两个都试试,看看哪一个表现最好。

通常,当队列几乎总是有条目时,轮询无锁队列的效果最好,当队列几乎总是空时,轮询阻塞队列的效果最好。

阻塞队列的缺点是延迟,通常是2-20个数量级,这是由于内核信令造成的。通过设计系统,使使用者线程在每个排队项上完成的工作所花费的时间远远长于此间隔,可以减轻这种情况。

 类似资料:
  • 我只是简单地从网络获取数据包,并在一个线程中将它们排队,然后在另一个线程中使用此数据包(取消排队)。 所以我决定使用boost库来创建一个基于https://www.quantnet.com/cplusplus-multithreading-boost/ 问题是,虽然没有得到任何数据,但Dequeue()方法会阻塞我的使用者线程,当我想终止使用者线程时,有时我无法结束或停止它。 结束Dequeue

  • 队列自旋锁 这是本章节的第二部分,这部分描述 Linux 内核的和我们在本章的第一部分所见到的--自旋锁的同步原语。在这个部分我们将继续学习自旋锁的同步原语。 如果阅读了上一部分的相关内容,你可能记得除了正常自旋锁,Linux 内核还提供自旋锁的一种特殊类型 - 队列自旋锁。 在这个部分我们将尝试理解此概念锁代表的含义。 我们在上一部分已知自旋锁的 API: spin_lock_init - 为给

  • 目前我们有LinkedBlockingQueue和Con的LinkedQueue。 LinkedBlockingQueue可以有界,但它使用锁。 ConcurrentLinkedQueue不使用锁,但它不受限制。而这并不是阻碍投票的原因。 显然,我不能有一个既阻塞又无锁的队列(无等待或非阻塞或其他东西)。我不要求学术定义。 有人知道一个队列实现,它基本上是无锁的(不在热路径中使用锁),空时阻塞(不

  • 问题内容: 多重处理是python中的强大工具,我想更深入地了解它。我想知道何时使用 常规的 锁和队列,何时使用多处理管理器在所有进程之间共享它们。 我提出了以下测试方案,其中包含四种不同的条件进行多处理: 使用池和 NO Manager 使用池和管理器 使用单个流程和 NO Manager 使用单个流程和一个经理 工作 所有条件都执行作业功能。包括一些通过锁固定的打印件。此外,该函数的输入只是放

  • 问题内容: 该模块的文档显示了如何将队列传递给以开头的进程。但是,如何与开始的异步工作进程共享队列?我不需要动态加入或其他任何方式,而只是工人(反复)将其结果报告给基地的一种方法。 失败的原因是: 。我理解这意味着什么,并且我理解继承的建议,而不是要求进行酸洗/酸洗(以及所有Windows特殊限制)。但如何 做 我通过队列的方式,作品?我找不到一个示例,并且我尝试了多种失败的替代方法。请帮忙? 问

  • 我刚才看到了三个方法的文档,当我们在工作线程中工作时,它们可以用来在UI线程中执行一段代码。方法有: > public final void runOnUIThread(Runnable action)-在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列中 public boolean post(Runnable act