草庐IT

result_queue

全部标签

c++ - 这是线程安全 Queue 类的正确方法吗?

我想知道这是否是用C++编写线程安全队列的正确方法?templateclassQueue{public:Queue(){}voidPush(T&a){m_mutex.lock();m_q.push_back(a);m_mutex.unlock();}T&Pop(){m_mutex.lock();T&temp=m_q.pop();m_mutex.unlock();returntemp;}private:std::queuem_q;boost::mutexm_mutex;};你明白了……我只是想知道这是否是最好的方法。谢谢!编辑:由于我收到的问题,我想澄清互斥锁是一个boost::mute

C++ vector 或 Queue 在内存和速度方面构建大 Q

我正在构建一个大型消息队列并仅使用PUSH和POP,这样可以更有效地(vector或队列)以最大速度维护大型数据structMQStruct{wchar_t*serviceName;intdurability;intmsgType;intmsgHeader;wchar_t*msgId;wchar_t*payload;intpayloadSize;intttl;intpriority;}MQStructObj;vectorMQvector;queueMSQ;intSendMessage(wchar_t*serviceName,intdurability,intmsgType,intmsg

c++ - result_of 没有为 mem_fn 定义类型

我有以下代码:#includestructX{intget()const&{return42;}};templatestd::result_of_tApply(Funcfn){Xx;returnfn(x);}intmain(void){Apply([](Xconst&x){returnx.get();});//Apply(std::mem_fn(&X::get));//doesnotcompile}第一次调用Apply编译正常,但如果我取消注释第二次调用,我会得到以下编译错误:main.cpp:16:5:error:nomatchingfunctionforcallto'Apply'A

c++ - 是否保证像 std::queue 这样的 C++ 标准库容器是可重入的?

我见过有人建议我应该将标准容器(如std::queue和std::vector)包装在互斥锁或类似的容器中(如果我想使用它们的话)。我读到需要为多个线程访问的容器的每个单独实例锁定,而不是每个类型或c++标准库的任何使用。但这假设标准容器和标准库保证是可重入的。语言中有这样的保证吗? 最佳答案 标准说:Exceptwhereexplicitlyspecifiedinthisstandard,itisimplementation-definedwhichfunctionsintheStandardC++librarymayberecu

c++ - 共享内存中的 boost::lockfree::queue 出现问题(boost 1.53、gcc 4.7.2/clang 3.0-6ubuntu3)

我在放置boost::lockfree::queue,..>时遇到问题在共享内存中。我需要它,因为我必须能够将超过65535条消息插入队列,而fixed_sized队列限制为65535。以下代码工作正常(但capacity选项暗示fixed_sized):typedefboost::interprocess::allocatorShmemAllocator;typedefboost::lockfree::queue,boost::lockfree::allocator>Queue;m_segment=newboost::interprocess::managed_shared_memo

c++ - 如何使用指针为 c++ priority_queue 实现排序方法

我的优先队列声明为:std::priority_queuequeue;classMyClass{booloperator不对队列中的项目进行排序。怎么了?我不想实现不同的(比较)类。答案摘要:问题是,指针地址是排序的。避免这种情况的唯一方法是“比较指针”的类。现在实现为:std::priority_queue,MyClass::CompStr>queue;classMyClass{structCompStr{booloperator()(MyClass*m1,MyClass*m2);}} 最佳答案 将比较仿函数ptr_less赋给查

c++ - 我可以将 boost::threadpool 用作 'thread-safe queue' 吗?

我需要的实际上是一个线程安全的队列结构,其中多个客户端不断将数据转储到队列中,一个工作线程不断处理并弹出队列STL或Boost中是否存在任何成熟的解决方案?我现在考虑使用Boost::threadpool来做这件事。只需将并行线程数设置为1,每次有新消息从客户端到达时,任务函数的输入参数都会更改。这是否有意义,这里是否存在我尚未预料到的任何限制? 最佳答案 在boost中有一个messagequeueclass,这就是您所需要的:一个线程安全的队列。消息队列是一个广泛用于进程间通信的概念。消息队列是线程安全的队列,其主要特点是它会阻

c++ - C++的STL priority_queue with struct

我们如何将STLpriority_queue用于结构?任何插入和弹出的插图,其中结构具有多种数据类型?说:structthing{inta;charb;}glass[10];.现在如何使用“inta”将此结构放入priority_queue进行排序? 最佳答案 这里是对youroriginalquestion,whichyoudeleted的略微修改的答案没有明显的原因。原始文件包含足够的信息供您弄清楚这一点,但这里是这样的:提供一个使用int进行比较的小于比较。您需要做的就是提供一个仿函数来实现与严格弱排序的小于比较,或者为您的类

c++ - priority_queue中第一个模板参数有什么用

对于std::priority_queue,我假设第一个模板参数指定了类型,第二个应该是该类型的容器。示例:priority_queue>someQueue;但是,下面的代码可以编译并且运行良好:classSomeClass{};intmain(){priority_queue>pq;intx=9;pq.push(x);intt=pq.top();cout上面的代码是否无效(即给UB)?如果有效-priority_queue中使用的第一个模板参数(即someClass)是什么。 最佳答案 通过LWGissue2566在jackson

redis - Redis "Pattern: Reliable queue"的代码实现

出色的redis文档列出了一个Reliablequeuepattern作为RPOPLPUSH函数的一个很好的候选者/示例。我将“可靠队列”理解为具有像AmazonSQSFIFOexactlyoncepattern这样的交付模式的东西.具体来说,您有一些N个进程向一个队列中提供数据,而一些M个工作进程从该队列中工作。这实际上看起来像什么实现?我会冒险做这样的事情:使供给进程填充工作队列。#feeder1importredisimportdatetimeimporttimer=redis.Redis(host='localhost',port=6379,db=0)whileTrue:now