草庐IT

Multithreading

全部标签

c++ - 当 TFramedTransport 打开时,thrift 中的 TNonblockingServer 崩溃

我一直在尝试用C++实现一个thrift服务器来与Python客户端通信。这是我的代码:C++服务器:shared_ptr_handler(newmyHandler());shared_ptr_processor(newmyService(_handler));shared_ptr_protocolFactory(newTBinaryProtocolFactory());shared_ptr_threadManager=ThreadManager::newSimpleThreadManager(15);shared_ptr_threadFactory(newPosixThreadFac

c++ - 获取/释放内存顺序

在例子中:#include#include#include#includestd::vectordata;std::atomicflag=ATOMIC_VAR_INIT(0);voidthread_1(){data.push_back(42);flag.store(1,std::memory_order_release);}voidthread_2(){intexpected=1;while(!flag.compare_exchange_strong(expected,2,std::memory_order_acq_rel)){expected=1;}}voidthread_3(){w

c++ - Windows7内存管理——如何防止并发线程阻塞

我正在开发一个由两个并发线程组成的程序。一个(此处为“时钟”)定期(10Hz)执行一些计算并且非常占用内存。另一个(此处为“hugeList”)使用更多RAM,但不像第一个那样时间紧迫。所以我决定将它的优先级降低到THREAD_PRIORITY_LOWEST。然而,当线程释放它已使用的大部分内存时,关键内存无法保持其计时。我能够将问题浓缩为这段代码(确保关闭优化!):当Clock尝试保持10Hz时序时,hugeList线程会分配和释放越来越多未按任何类型组织的内存。#include"stdafx.h"#include#include#include#include#includevoi

c++ - 如何有效地使用 C++11 随机生成器?

我正在执行计算实验,这需要可重现。因此每个实验都使用自己的随机数生成器并记住其种子:classExperiment{public:voidoperator()();private:unsignedseed_;std::mt19937engine_;};问题是引擎需要传递给最基本的功能。假设在调用堆栈下方10层的某处有一个简单的函数,它需要一个引擎来生成一个介于0和1之间的随机数。然后该引擎需要传递给这10个调用中的每一个,使代码成为乱七八糟。我考虑并拒绝了这两种方法:1.globalengine:我会有一个全局引擎,所有基本函数都会调用这个引擎。但是,如果我想在不同的线程中运行多个实验

c++ - win32 std::thread 是否泄漏内存?

我在Windows732位下使用MinGWgcc4.8.2编译了以下代码://t.cpp#include#includeclassMine{public:Mine(){std::cout使用g++t.cpp-std=c++11-static-ggdb,并使用Dr.Memory和drmemorya.exe进行调试,我得到了以下输出:Dr.Memoryversion1.6.1739build42builtonFeb23201422:29:25Dr.Memoryresultsforpid7400:"a.exe"Applicationcmdline:"a.exe"Recorded102supp

c++ - 从内容更改的文件夹中删除文件

我有一个主线程和一个处理一些文件的线程。当主线程监控的文件夹有变化时,会向处理线程发送信号启动。处理完一个文件后,我希望将其删除,然后让文件夹检查文件夹中是否还有文件。如果有则重复该过程。我的问题是反复检查文件夹。在处理线程上。该功能列在下面的代码中,问题是我无法从文件夹中删除文件。我很困惑,所以任何输入都将受到赞赏。在dataprocessor.h中...QListjustProcessed;...在dataprocessor.cpp中voidDataProcessor::onSignal(){//Willkeeprunningaslongastherearefilesinthesp

c++ - PPL 任务 - 在桌面应用程序的 UI 线程中继续

我想使用ppl任务在后台做一些工作,并在完成后在窗口中显示结果。在我的例子中,UI框架是MFC。结构将是:usingnamespaceconcurrency;create_task([]{//thiscanberuninanythread,shouldn'tbetheUIthread//dorealworkherereturn42;}).then([](intn){//thisshouldberunontheUIthread//...openaMFCwindowtodisplayresults});问题是,非Windows应用商店应用不允许指定task_continuation_con

c++ - 测试静态局部对象的初始化是否线程安全

我正在尝试编写一个测试(不检查汇编代码)来查看某个编译器是否符合c++11标准关于静态局部对象初始化的线程安全要求。到目前为止,我只能想出非确定性方法(在一个线程上休眠足够长的时间以使其可能(但不确定,问题!)另一个线程已经运行到某个执行点).有没有办法确定性地做到这一点? 最佳答案 例如像这样的syncvoodoo(见评论):#include#include#include#includestd::mutexg_mutex;conststd::chrono::secondsg_dura(1);voidlog(constchar*m

c++ - 具有 "blocking"pop 的单一生产者单一消费者队列

我正在寻找具有“阻塞”流行音乐的单一生产者单一消费者队列。升压spsc_queue几乎没问题,除了一种方法:boolpop(T&ret);Popsoneobjectfromringbuffer.该方法是“非阻塞的”,如果没有数据则立即返回。我希望此方法“阻塞”并等待一些数据到达。我应该使用哪些集合?upd至少有人可以建议任何带有阻塞pop的c++队列吗? 最佳答案 并发队列很少提供弹出阻塞接口(interface):在许多情况下,用户应该执行阻塞逻辑,避免队列实现的不必要开销。也就是说,您可以在queue::pop周围添加一个包装器

c++ - 如何识别导致Qt 警告信息的行?

我正在使用Qt,有时它会在调试窗口中给出以[E]开头的警告消息。大多数时候,[E]警告消息还会提供有关发出此警告的cpp文件的行信息的信息。就像这个:atkernel\qmetatype.cpp:597TypeconversionalreadyregisteredfromtypeQPairtotypeQtMetaTypePrivate::QPairVariantInterfaceImpl不过,通常这些cpp文件都是Qt自带的文件,在windows中一般都是dll。问题是,我从来没有在自己的代码中注册过这样的类型转换。而且这个警告似乎与多线程有关,因为它不会每次都出现。是否有任何方法、功