草庐IT

惰性队列

全部标签

数据结构:栈和队列

王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人今天我们来学习线性表中最后两种数据结构:栈和队列。它们是两种比较特殊的线性表,相较于数组和链表而言,可以认为它们是“高级”的线性表。栈和队列的特点前几天和媳妇聊到大学校门口的美食广场,每到夜晚便人声鼎沸,撸肉串的,喝扎啤的……Holdon!Holdon!(最近沉迷《中国说唱巅峰对决》hhh)。羊肉串和扎啤不就是栈和队列吗?你品,你细品。串肉串的时候,从签子的尖头(栈顶)开始串(入栈),最先串进去的被压倒签子的底部(栈底),而撸串(出栈)也是从尖头开始,最后串进去的却最先被吃掉(后进先出,LIFO,las

c++ - 具有 O(1) 出队和 O(whatever) 入队的优先级队列

我正在用C++编写一个应用程序,其中对优先级队列进行O(1)出队操作至关重要,而入队的复杂性并不那么重要(除非它变成n^2或2^n当然)。一开始我用的是链表。它非常适合出队(O(1)),并且具有良好的入队复杂度。唯一的问题是,对其进行排序。并不是说使用具有O(n)复杂度的插入排序就可以满足我的需要。但是对链表进行排序是一件痛苦的事情。太慢了。vector一点也不好。出队将是O(n)以将所有元素移回一个位置。入队仍然是O(n),但速度要快得多。你能推荐更高效的方法吗?谢谢。 最佳答案 反向排序的vector有O(1)pop_back和

c++ - boost 消息队列线程安全和进程安全吗?

我正在尝试使用boost::interprocess::message_queue将消息从一个进程发送到另一个进程并完成发送者代码。我想知道这个消息队列是否是进程安全的,但没有找到任何关于它的官方公告,而在stackoverflow社区的相关问题中,只有关于boost::interprocess中的共享资源是线程安全的,其中没有提到message_queue。提前致谢。 最佳答案 正如iamnoten所提到的,是的,它是线程/进程安全的。问题已关闭。 关于c++-boost消息队列线程安

C++ 优先级队列查找和修改对象

我正在尝试实现一个A*算法并且我需要一个优先级队列,但是std::priority_queue对我不起作用,因为我需要找到一个元素(aNode对象)是否在priority_queue中,以访问其数据并在必要时修改它。我能以某种方式使用std::priority_queue来做到这一点吗?我将不胜感激代码建议,因为我对std::priority_queue没有太多经验。 最佳答案 "butthethestl::priority_queuedoesn'tworkformebecauseIneedtofindwhetheranelemen

消息队列之王——Kafka

 Zookeeper  在学习kafka之前,我们需要先学习Zookeeper,那Zookeeper是什么呢?Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。Zookeeper工作机制        Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说Zookeeper=文件系统+通知机制。Zookeeper特点Zookeeper是一个领导者(Le

c++ - 多线程安全消息队列

这是我的本质:我有线程A,它定期检查消息并处理它们。线程B和C需要向A发送消息。当B和C或B或C试图向A发送消息而A正在处理消息并因此访问队列时,就会出现问题。这个问题通常是怎么解决的?谢谢 最佳答案 这通常使用mutexes解决,或其他多线程保护机制。如果您在Windows上工作,MFC会提供CMutexclass对于这个问题。如果您在posix系统上工作,posixapi会提供pthread_mutex_lock,pthread_mutex_unlock,andpthread_mutex_trylockfunctions.一些基

c++ - 并行循环中的惰性 vector 访问

在性能关键的并行代码中,我有一个vector,其元素是:计算成本很高,结果是确定性的(给定位置的元素值将仅取决于位置)随机访问(通常访问次数大于或远大于vector的大小)集群访问(许多访问请求相同的值)vector由不同的线程共享(竞争条件?)为避免堆碎片整理,永远不要重新创建对象,而是尽可能重置和回收放置在vector中的值将由多态对象提供目前,我预先计算了vector的所有可能值,因此竞争条件应该不是问题。为了提高性能,我正在考虑创建一个惰性vector,以便代码仅在请求vector元素时才执行计算。在并行区域中,可能会发生多个线程同时请求并可能计算同一元素的情况。我如何处理这种

c++ - 无锁队列中的内存管理

我们一直在寻求在我们的代码中使用无锁队列,以减少当前实现中单个生产者和消费者之间的锁争用。那里有很多队列实现,但我不太清楚如何最好地管理节点的内存管理。例如,生产者看起来是这样的:queue.Add(newWorkUnit(...));消费者看起来像:WorkUnit*unit=queue.RemoveFront();unit->Execute();deleteunit;我们目前使用内存池进行分配。您会注意到生产者分配内存而消费者删除它。由于我们正在使用池,因此我们需要向内存池添加另一个锁以正确保护它。这似乎首先否定了无锁队列的性能优势。到目前为止,我认为我们的选择是:实现无锁内存池。

c++ - 访问队列数据结构的信号处理程序(竞争条件?)

我目前正在用C++编写一个小型shell。作业和与之关联的PID存储在作业指针队列中(job*)。运行新作业时,有关它的信息将添加到队列中。由于可以同时处理多个作业,并且可以随时在shell的控制台输入新作业,因此我有一个信号处理程序来等待终止的作业。当一个作业终止时,我需要从事件作业队列中删除它的信息并将其移动到我的已终止作业的双端队列中。但是,当另一个作业停止时,用户的新作业可能正在添加到队列中。在这种情况下,他们的insert队列操作将被暂停,我的信号处理程序将被调用,它将执行它的pop操作。我想了解如何解决这种潜在的竞争条件,因为我认为在此过程中可能会发生损坏。我不能使用互斥锁

c++ - C++ 中的共享队列

我只是简单地从网络获取数据包,并将它们放入一个线程中,然后在另一个线程中使用这些数据包(出队)。所以我决定使用boost库来创建一个基于https://www.quantnet.com/cplusplus-multithreading-boost/templateclassSynchronisedQueue{private:std::queuem_queue;//UseSTLqueuetostoredataboost::mutexm_mutex;//Themutextosynchroniseonboost::condition_variablem_cond;//Thecondition