草庐IT

阻塞队列--LinkedBlockingQueue

全部标签

c++ - 如何编写可以接受堆栈或队列的函数模板?

我正在实现四种算法,它们完全除了它们使用的数据结构不同外——两种使用priority_queue,一种使用stack,最后一个使用queue。它们相对较长,所以我希望只有一个函数模板接受容器类型作为模板参数,然后让每个算法使用适当的参数调用该模板,如下所示:templatevoidfoo(/*args*/){ContainerdataStructure;//Algorithmgoeshere}voidqueueBased(/*args*/){foo>(/*args*/);}voidstackBased(/*args*/){foo>(/*args*/);}我已经设法用基于priority

C++:使用高效获取/放置多个元素的队列?

所以,我觉得C++中应该有一个很好的内置解决方案,但我不确定它是什么。我需要一个队列(理想情况下是线程安全的,但如果需要的话我可以自己将其同步包装)来有效处理字节组-允许不同大小的读/写。所以,界面看起来像//removesthefirstbytesToReadelementsfromthefrontofthequeueandplacestheminarray;returnstheactualnumberofbytesdequeuedintdequeue(unsignedchar*array,intbytesToRead)//AddsbytesToWriteelementsfromar

c++ - 结构指针的优先级队列

我知道有类似的线程,但在花了一个小时试图强制我的程序运行后,我决定寻求帮助。首先。我认为我很了解C++,因为我尝试了一些在PHP中非常简单(我最了解的编程语言)但在C++中非常复杂的东西(至少对我来说非常复杂)。所以我想创建结构指针的priority_queue。很明显,我需要创建自己的比较函数。所以我尝试了这段代码:#include#include#includeusingnamespacestd;typedefstructMI{intnr;intkoszt;booloperatorb.koszt;}}miasto,*miasto_wsk;intmain(){priority_que

c++ - vsync "wait"(阻塞)在什么时候发生?

假设我有一个非常快的程序,如果禁用垂直同步,它会运行>60fps。vsync什么时候强制程序等待?当您清除屏幕或翻转缓冲区时它会阻塞吗?还是我不知道的其他时间?顺便说一句,我指的是OpenGL。奖励问题鉴于阻塞发生的时间点不一定是特定的,我将如何衡量阻塞所花费的时间?换句话说,我如何计算出程序可以运行多快? 最佳答案 对您的回答的评论表明,这仍然是一个存在很多误解的话题。长话短说:您的程序没有明确的阻塞点。交换缓冲区调用立即返回。不相信我?编写一个程序来测量在单个交换缓冲区调用中花费的时间(即不进入渲染循环)。但我听到你说:如果我启

c++ - C++ 中优先级队列的时间复杂度

创建堆需要O(n)时间,而插入堆(或优先级队列)需要O(log(n))时间。取n个输入并将它们插入优先级队列,操作的时间复杂度是多少?O(n)或O(n*log(n))。此外,如果清空整个堆(即n次删除),同样的结果也会成立,对吧? 最佳答案 如果您有一个大小为n的数组,并且您想要一次从所有项目构建一个堆,Floyd的算法可以用O(n)的复杂度来完成。参见Buildingaheap.这对应于std::priority_queueconstructors接受容器参数。如果您有一个空的优先级队列,您希望向其中添加n个项目,一次一个,那么复

C++ - 线程和多队列

我需要构建一个由工作人员(表示为线程)和(多个)队列组成的系统。个别作业在其中一个队列中等待,并等待工作线程处理它们。每个工作人员只能处理来自某些队列的作业。没有旋转等待。C/C++、pthreads、标准POSIX。我的问题是“多队列”。我知道如何用一个队列来实现它。工作人员需要等待他们可以处理的所有队列(等待其中的任何一个)。在Windows上我会使用WaitForMultipleObjects,但这需要是多平台的。我不需要任何特定的代码,只需要提示或我应该使用的模型的描述。提前致谢。 最佳答案 怎么样:所有工作线程都等待一个信

c++ - 寻找对我的线程安全、无锁队列实现的批评

所以,经过一些研究,我写了一个队列。它使用固定大小的缓冲区,因此它是一个循环队列。它必须是线程安全的,而且我已尝试使其无锁。我想知道它出了什么问题,因为这些事情我自己很难预测。这是标题:templateclassLockFreeQueue{public:LockFreeQueue(uintbuffersize):buffer(NULL),ifront1(0),ifront2(0),iback1(0),iback2(0),size(buffersize){buffer=newatomic[buffersize];}~LockFreeQueue(void){if(buffer)delete

[数据结构] 队列

队列的基本概念队列(Queue),是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队,删除元素称为出队。其操作特性是先进先出队列的常见操作:函数名功能InitQueue(*Q)初始化队列,构造一个空队列QQueueEmpty(Q)判断队列空EnQueue(*Q,x)入队,若队列未满,将x加入DeQueue(*Q,*x)出队,若队列非空,删除队头元素GetHead(*Q,*x)读队头元素队列的顺序存储结构队列的顺序存储队列的顺序实现是分配一块连续的存储单元存放队列中的元素,并设置两个指针:队头指针front和队尾指针rear。存储类型结构体如下:#

c++ - 在插槽中调用 QDialog::exec 是否会阻塞主事件循环?

我的Qt应用程序的主窗口是一个普通的QMainWindow子类。在那个窗口中我有几个按钮;每个都有它的clicked信号连接到它自己的插槽,每个插槽创建一个不同的QDialog,如下所示:voidonButtonA_clicked(){MyADialog*dialog=newMyADialog(this);dialog->exec();deletedialog;}我一直在阅读这篇文章:https://wiki.qt.io/Threads_Events_QObjects#Events_and_the_event_loop作者说youshouldnevereverblocktheevent

c++ - 为什么 std::getline 不阻塞?

我在Objective-C类中有这段代码(在Objective-C++文件中):+(NSString*)readString{stringres;std::getline(cin,res);return[NSStringstringWithCString:res.c_str()encoding:NSASCIIStringEncoding];}当我运行它时,我每次都会得到一个零长度的字符串。从来没有机会在命令行键入。没有什么。当我将这段代码逐字复制到main()中时,它起作用了。我在build设置下打开了ARC。我不知道发生了什么。OSX10.7.4,Xcode4.3.2。它是一个控制台