草庐IT

threading-multi

全部标签

c++ - 如何使用 gdb 查看 boost::multi_index 哈希索引的数据

我想使用gdb查看boost::multi_index(版本1.67.0)包含的数据。首先我尝试了https://github.com/ruediger/Boost-Pretty-Printer.似乎不支持散列索引,例如hashed_unique。我注意到如果第一个索引是受支持的类型,例如sequenced,Boost-Pretty-Printer可以正常工作。但是,我现在无法编辑代码。我需要调试核心文件和二进制可执行文件。我试图通过散列索引来理解multi_index的内部结构。我写了下面的测试代码:#include#include#includenamespacemi=boost:

c++ - std::thread 参数的生命周期

当参数传递给std::thread()时,生成新线程的线程是否会等到所有参数都完全复制到新线程本地存储中?简单的例子:voidf(){intarray[10];........//donesomethingwitharraystd::threadth(someF,array);//assumingthatsomeFacceptsint[]th.detach();}我是否应该自动假设所有数据在f()结束之前都已安全复制?我看到的一种情况是,假设f()不等待,而是全力以赴,th正在尝试复制array正在被摧毁。 最佳答案 是的。如果复制

c++ - std::thread 检测主线程

在C++11中是否有任何可靠的方法来检测当前线程是否为主线程?或者我是否必须使用std::this_thread::get_id()手动保存主线程线程ID,然后使用如下例程:boolisMainThread(){returntheMainThreadIdISavedOnProgramStart==std::this_thread::get_id();}有没有通用的方法来做到这一点?上述解决方案行得通吗?谢谢 最佳答案 主线程是什么意思?如果你的意思是执行main()的线程,那么你无法知道线程是否是主线程。你必须保存它的ID,稍后你可

c++ - 移动包含正在运行的 std::thread 成员的对象

如何在对象中运行线程时正确使用移动语义?示例:#include#include#includestructA{std::stringv_;std::threadt_;voidstart(){t_=std::thread(&A::threadProc,this);}voidthreadProc(){for(;;){std::cout我想在移动后使用类成员,但是当我离开范围时,类成员被销毁并且std::thread按预期移动到新对象中但它开始使用被销毁的成员。在我看来是因为在线程初始化中使用了this指针。在这种情况下,最佳做法是什么? 最佳答案

c++ - 在类中初始化 boost::multi_array

首先我想说我是新手。我正在尝试初始化boost:multi_array在我的类(class)里。我知道如何创建boost:multi_array:boost::multi_arrayfoo(boost::extents[1000]);但作为类(class)的一部分,我遇到了问题:classInflux{public:Influx(uint32_tnum_elements);boost::multi_arrayfoo;private:};Influx::Influx(uint32_tnum_elements){foo=boost::multi_array(boost::extents[n

c++ - 是否缓存了 boost multi_index 提取的键?

我正在使用boost::multi_index和我想根据其大小建立索引的数据类型。但是,此数据类型的size()成员函数执行起来开销很大。multi_index是否缓存从其键提取器中获取的值?例如,如果我创建了一个multi_index容器,其中包含一个有序索引和一个成员函数键(element.size()),并插入了一个元素,该元素的大小使其位于容器中间的某个位置,容器会重新-在找到正确的插入点之前遍历其内部数据结构时,在它访问的所有元素上调用size()成员函数? 最佳答案 好吧,成员函数索引器的文档说他们调用引用的成员函数:h

c++ - 如何遍历一个boost::multi_array

我一直在研究boost::multi_array库,以寻找一个允许您在单个for循环中遍历整个multi_array的迭代器。我不认为那个库中有任何这样的迭代器。(在那里找到的迭代器可以让你遍历multi_array的一个维度)我错了吗?如果没有,是否有任何库定义了这样一个迭代器?进入细节,我想写这样的东西:boost::multi_arrayma(boost::extents[3][4][2]);for(my_iteratorit=ma.begin();it!=ma.end();++it){//dosomething//here*ithaselementtype(inthiscase

我的类中的 c++ condition_variable wait_for 谓词,std::thread <unresolved overloaded function type> error

我想在我的类中使用一个线程,然后该线程需要使用一个condition_variable,条件变量将被阻塞,直到一个谓词被更改为true。代码如下所示:classmyThreadClass{boolbFlag;threadt;mutexmtx;condition_variablecv;boolmyPredicate(){returnbFlag;}intmyThreadFunction(intarg){while(true){unique_locklck(mtx);if(cv.wait_for(lck,std::chrono::milliseconds(3000),myPredicate)

c++ - 使用指向独立函数的指针调用 std::thread

我试图调用std::thread完美转发构造函数(templateexplicitthread(Function&&f,Args&&...args);)带有指向函数的指针(不是指向成员函数的指针),如下面的M(N)WE所示:#include#includestaticvoidfoo(std::stringquery,int&x){while(true);}intmain(){inti=1;autothd=std::thread(&foo,std::string("bar"),i);thd.join();}现场演示:https://godbolt.org/g/Cwi6wd为什么代码无法在

c++ - 将对临时/匿名 lambda 的 const 引用传递给 std::thread 构造函数是否安全?

从这个问题开始:can-a-temperary-lambda-by-passed-by-reference?我有一个固定的代码片段://globalvariablestd::threadworker_thread;//Templatefunctiontemplatevoidstart_work(constFunctor&worker_fn)//lambdapassedbyconstref{worker_thread=std::thread([&](){worker_fn();});}这样调用:voiddo_work(intvalue){printf("Hellofromworker\r