草庐IT

c++ - 如何开始使用多线程编程?

我是StackOverflow的初学者。我正在使用C/C++开发Unix平台。了解这些方面的基本编程,我该如何从multithreading开始??多线程似乎很有趣,我想增加这方面的知识。我如何开始使用多线程?有哪些最佳技术/书籍/电子书/文章可以尽早掌握这些概念? 最佳答案 学习多线程编程有两个部分:如何编写多线程应用程序如何使用可用的API(pthread)学习多线程编程比较难,这篇文章发表在LinuxJournal这将帮助您了解基本原理。为了更好地理解pThreads,我建议阅读本教程-POSIXThreadsProgramm

c++ - 死锁使用 std::mutex 保护多线程中的 cout

在多个线程中使用cout可能会导致交错输出。所以我尝试用互斥锁来保护cout。以下代码使用std::async启动10个后台线程。当一个线程启动时,它会打印“Startedthread...”。主线程按照后台线程的创建顺序迭代它们的future,并在相应线程完成时打印出“Donethread...”。输出已正确同步,但在一些线程启动和一些线程完成后(见下面的输出),发生死锁。所有后台线程都离开了,主线程正在等待互斥锁。死锁的原因是什么?当print函数离开或for循环的一次迭代结束时,lock_guard应该解锁互斥锁,以便其中一个等待线程能够继续。为什么所有的线程都饿死了?代码#in

c++ - 在多线程 C++ 应用程序中,我是否需要互斥锁来保护简单的 boolean 值?

我有一个多线程C++应用程序,它使用OpenSceneGraph库进行3D渲染。我计划使用boost::threads将OSG的渲染循环作为一个单独的线程启动,将包含共享状态的数据结构传递给线程。我试图避免任何过于重量级的东西(如互斥锁)进行同步,因为渲染循环需要非常紧凑,而OSG本身试图避免不得不锁定。大多数共享状态是在线程启动之前设置的,并且永远不会改变。我确实有一些需要更改的数据,我计划对其进行双重缓冲。但是,我有一个简单的boolean值,用于指示线程暂停渲染,然后恢复渲染,另一个用于终止它。在这两种情况下,应用程序线程都会设置boolean值,而渲染线程只读取它。我需要同步对

c++ - C++ 中的多线程......从哪里开始?

我想开始学习C++中的多线程。我也在用Java学习它。在Java中,如果我编写一个使用多线程的程序,它可以在任何地方工作。但是在C++中,多线程不依赖于特定于平台的API吗?如果是这样,那似乎会妨碍便携性。如何在C++中执行多线程而不导致可移植性问题?是boost的thread图书馆一个好的解决方案?作为旁注-怎么可能将多线程实现为库?这不是必须由编译器完成的事情吗? 最佳答案 如果您没有支持C++0x的编译器然而(例如,VisualStudioC++2010可用),使用boost线程。(除非您使用已经支持线程的框架,否则情况并非如

c++ - 多线程环境中的信号处理函数

在我的多线程GUI应用程序中,我有以下信号处理代码。我想改进这段代码,使其正确且线程安全,但在信号处理中有些事情我并不完全理解:在进程或线程级别处理信号(我可以有线程特定的信号处理程序)吗?signal_handler函数在哪个线程上下文中执行?是否可以在短时间内发送多个SIGTERM信号?使用互斥锁来阻止signal_handler的并行执行是否有意义?voidsignal_handler(intsig){switch(sig){caseSIGTERM:::wxLogMessage(wxT("SIGTERMsignalreceived..."));break;caseSIGINT::

c++ - 多线程可以加速内存分配吗?

我正在使用8核处理器,并且正在使用Boost线程来运行大型程序。从逻辑上讲,程序可以分成组,每个组由一个线程运行。在每个组中,一些类调用“new”操作符总共10000次。RationalQuantify表明,"new"内存分配在程序运行时占用了最大的处理时间,并减慢了整个程序的速度。我可以加快系统速度的一种方法是在每个“组”中使用线程,这样10000个内存分配可以并行发生。我不清楚这里将如何管理内存分配。操作系统调度器真的能够并行分配内存吗? 最佳答案 标准CRT虽然在旧版VisualStudio中默认CRT分配器是阻塞的,但至少对

c++ - 如何在 2019 年在 OpenCV 中正确使用多线程?

背景:我阅读了一些关于OpenCV中多线程的文章和帖子:一方面,您可以使用TBB或OpenMP支持构建OpenCV,这些支持在内部并行化OpenCV的功能。另一方面,您可以自己创建多个线程并并行调用函数以实现应用程序级别的多线程。但是我无法得到一致的答案,哪种多线程方法是正确的方法。关于TBB,一个answer从2012年开始,有5票赞成:WithWITH_TBB=ONOpenCVtriestouseseveralthreadsforsomefunctions.TheproblemisthatjustahandsomeoffunctionarethreadedwithTBBatthem

c++ - 在多线程程序中创建 OpenGL 结构?

我正在尝试在我正在构建的物理引擎中执行以下操作:有2个线程,一个用于世界逻辑,一个用于渲染。主线程(创建其他线程的线程)是渲染线程,然后世界线程是从它派生出来的。在渲染线程上有一个名为渲染处理程序的全局数据结构声明为:classRenderer{private:/*shaderstuff*/mutexbusy_queue;vectorrender_queue;public:/*Bunchofmethods*/voidadd_data(Render_Info*);voidrender();};并且一个Render_Info结构被声明为:structRender_Info{mutexinf

c++ - PThread 是多平台/C++ 多线程程序的好选择吗?

过去5年主要从事Java和.NET的开发,在此期间没有编写任何重要的C或C++。所以已经离开那个场景一段时间了。如果我现在想编写一个C或C++程序,它执行一些多线程并且源代码可跨Windows、MacOSX和Linux/Unix移植-PThread是一个不错的选择吗?C或C++代码不会执行任何GUI,因此无需担心任何这些。对于Windows平台,我不想带来太多Unix包袱,但就unix仿真运行时库而言。更喜欢适用于Windows的PThreadAPI,它是现有Windows线程API的尽可能精简的包装器。附录编辑:Amleaningtowardgoingwithboost:thread

c++ - 多线程会提供任何性能提升吗?

我一般是编程新手,所以在回答我的问题时请记住这一点。我有一个程序,它采用一个大型3D数组(10亿个元素)并将沿各个轴的元素相加,以生成数据每一侧的投影的2D数组。这里的问题是它对内存非常密集,因为程序不断地从内存中获取信息,包括读取和写入。问题是,如果我对程序进行多线程处理,我会获得任何性能提升,还是最终会遇到RAM访问瓶颈?当我说多线程时,我只是指2或4核的多线程,仅此而已。如果有帮助,我当前的计算机配置是2.4ghzcore2quad、1033fsb、4gbramat667mhz。提前致谢,-伪造编辑:在我看来,这里的人们对我最初预期的这个问题更感兴趣。我将扩展问题并为感兴趣的人发