草庐IT

pj_thread_register

全部标签

c++ - 当 num_threads 变化时,OpenMP 并行区域开销增加

我试图在程序的不同部分使用不同数量的线程来实现最大加速。但是,发现使用num_threads子句切换线程数会产生大量开销。我正在寻找对此的解释,因为根据我的理解,线程池应该始终包含给定数量的线程,而不管调用的实际数量是多少。我也在寻找可能的解决方法。谢谢。示例代码:#include#includevoidomp_sum(intntd){ints=0;#pragmaompparallelnum_threads(ntd){inti=omp_get_thread_num();#pragmaompatomics+=i;}}intmain(){intN=100;intNT1=6,NT2=12;d

c++ - boost::thread 应用程序,奇怪的数据竞争报告

我编写了一个boost::thread应用程序,其中我可能有一些基于valgrind/helgrind报告的竞争条件。我想确定这些比赛的原因。程序是:#includeboost::mutexmyMutex;boost::condition_variablemyConditionalVariable;boolfunctionWasRun=false;voidfunction(){{boost::lock_guardlock(myMutex);functionWasRun=true;}myConditionalVariable.notify_one();//doSomething1();}

c++ - 如何中断其他 std::threads C++

我有一个服务器,它是以每个客户端一个线程的方式构建的。最近,我遇到了一个很难想出解决方案的问题,所以我想寻求帮助。我的服务器有一个大厅,大厅里有很多房间(都是用户的),房间里有玩家。每个房间都有一个管理员,当管理员选择离开时-房间关闭,所有用户都应该返回大厅。现在,我已经有了一个工作代码-但问题是,我不知道我应该如何让其他客户也退出房间。线程中运行的代码如下:while(in_lobby){//Receiveamessage//Dostuff//IncertaincaseschangetheBooleantofittothesituation//Sendacomeback}while(

c++ - 线程构建 block : Deadlocks because all threads used up

在英特尔线程构建block框架中,如何确保所有线程不忙于等待其他线程完成。例如考虑以下代码,#include#include#include#include#includestd::futurerun_something(std::functionfunc,boolb){autotask=std::make_shared>(std::bind(func,b));std::futureres=task->get_future();tbb::task_groupg;g.run([task](){(*task)();});returnres;};intmain(){tbb::parallel

c++ - 通过外部信号停止 std::thread 的有效方法是什么?

这是一段无法按设计工作的代码,请向我解释这里出了什么问题(简化代码以使其更具可读性)。shm_serverserver;std::threads{server};//somework...std::cout看起来我为shm_server类的另一个拷贝调用了一个stop方法。因为stop()仅将std::atomic_booldone;(shm_server成员)设置为true但我看到了线程函数(这是shm_server的operator())仍然看到done等于false。std::thread只有移动构造函数?在这种典型情况下,如何正确地向服务器发送信号?classshm_serve

c++ - 按需条件 std::atomic_thread_fence 获取的优缺点?

下面的代码显示了两种通过原子标志获取共享状态的方法。读取器线程调用poll1()或poll2()来检查写入器是否已发出标志。投票选项#1:boolpoll1(){return(flag.load(std::memory_order_acquire)==1);}投票选项#2:boolpoll2(){intsnapshot=flag.load(std::memory_order_relaxed);if(snapshot==1){std::atomic_thread_fence(std::memory_order_acquire);returntrue;}returnfalse;}请注意,选

c++ - malloc_trim(0) 释放 Thread Arenas 的 Fastbins?

在过去一周左右的时间里,我一直在调查内存使用量随时间累积的应用程序中的问题。我将其缩小到复制astd::vector>>>>>在工作线程中(我意识到这是一种组织内存的荒谬方式)。定期地,工作线程被销毁、重新创建,并且该线程在启动时复制该内存结构。复制的原始数据通过引用从主线程传递到工作线程。使用malloc_stat和malloc_info,我可以看到当工作线程被销毁时,它正在使用的arena/heap在它的fastbins空闲列表中保留了用于该结构的内存。这是有道理的,因为有许多小于64字节的单独分配。问题是,当工作线程被重新创建时,它会创建一个新的arena/heap而不是重复使用

c++ - ARM NEON aarch64 : How to compare and update neon registers in optimized way?

实际上,我正在尝试找出一种比较从“unsignedshort”数组加载的NEON寄存器值的好方法。由于我正在处理一个大型项目,因此无法解释共享整个代码部分。相反,我将分享一个类似的例子,以便每个人都能理解实际的问题场景。C++实现:unsignedshort*values=newunsignedshort[8];for(inti=0;i255){values[i]=255;}}程序集实现:MOVW3,#255UMOVW2,V4.H[0]CMPW2,#0x00FFCSELW2,W3,W2,GTMOVV4.H[0],W2UMOVW2,V4.H[1]CMPW2,#0x00FFCSELW2,W

c++ - `std::this_thread::sleep_for()` 是否有任何特定于平台的限制?

在使用std::this_thread::sleep_for()毫秒及以上时,是否需要考虑任何已知的可移植性问题?在我正在进行的项目中,我希望使用Microsoft的Sleep()到naonsleep()到usleep,具体取决于特定平台上可用的内容。其中一些具有明显的限制,例如在某些平台上不支持1000毫秒或更多的延迟。std::this_thread::sleep_for()是否也有这样的怪癖? 最佳答案 Maximumsleepduration:std::this_thread::sleep_for()这里没有问题。你想睡多久

c++ - 是否可以创建一个 C++ 工厂系统来创建任何 "registered"对象类型的实例,而不考虑继承?

我花了一整天的时间研究这个主题,所以我带着一些关于这个主题的零散知识来向您提出这个问题。请允许我描述一下我正在尝试完成的工作,也许您可​​以建议解决眼前问题的方法,或者建议另一种完全解决问题的方法。我正在尝试模仿与XAML文件在WPF中的工作方式相关的内容,您实际上是在根据XML定义实例化对象树。如有不妥,请告知。此问题在其他方面与WPF、C#或任何管理的内容无关-我仅提及它是因为它是一个类似的概念..因此,我已经创建了一个XML解析器类,并生成了一个基于ObjectNode对象的节点树。ObjectNode对象包含一个名为type的字符串值,并且它们具有子ObjectNode对象的s