草庐IT

【JavaEE】线程池

全部标签

c++ - 在渲染之外的另一个线程中初始化 OpenGL 上下文

我正在主线程中初始化我的OpenGL上下文(SDL/GLEW)。但是渲染是在不同的线程中完成的(比如SDL_GL_SwapWindow或glDrawElements)。问题是,如果我调用SDL_GL_SwapWindow,什么也不会发生。我试图在每次交换后简单地更改透明颜色,但没有任何反应。voidrender(){//Rendering...}intmain(){//Initialization...threadrendering(render);}这会是问题吗? 最佳答案 不会像您预期的那样工作。OpenGL上下文是线程本地的。

c++ - 用一个线程做一个部分,用多个线程做一个for循环

我正在使用OpenMP,我想生成线程,以便一个线程执行一段代码并完成,与运行并行for循环迭代的N个线程并行。执行应该是这样的:SectionA(onethread)||SectionB(parallel-for,multiplethreads)|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||V||VVVVVVVVVV我不能只用#pragmaomponce编写并行for,因为我不希望执行A部分的线程执行for循环。我试过这个:#pragmaompparallelsections{#pragmaompsec

c++ - Boost单元测试可以多线程吗?

我的单元测试需要运行大量BOOST_CHECK_CLOSE调用,这会花费很长时间(据我所知在一个线程上)。我希望能够按照这些思路做一些事情:#pragmaompparallelfornum_threads(8)for(inti=0;i但是,当我尝试这个时,似乎发生了一些我无法控制的非常讨厌的内存损坏。段错误最常见,但有时会这样:***stacksmashingdetected***有没有人有一些可以分享的实现我预期结果的好方法的经验?我相信每个人都会喜欢快速运行他们的测试! 最佳答案 它不能像这里提到的那样(第3项)http://w

c++ - 无锁线程池

对于标准C++11和/或在一般上下文中,以下推理是否正确?在实现线程池时,人们通常不想让那些没有工作可做的线程忙于循环。因此,需要某种std::condition_variable。因此,需要某种std::mutex。因此,不可能有一个无锁线程池(没有忙循环)。或者我是否缺少一些使它成为可能的操作系统机制?您能否提供额外的推理来表明不存在无锁非忙循环线程池? 最佳答案 如果允许忙等待,那当然是完全可以的。但是没有忙等待,你需要操作系统的帮助-它不一定是互斥体,它当然可以是read,poll,WaitForMultipleObject

c++ - 我们是否需要保护单个赋值或 if 线程安全语句

假设我有:staticintwrite_log=0;void*logger__run(void*arg){//loggerthreadexecution.while(1){//getlogmessagefromsharedqueue.if(write_log){//justcheckingwrite_logvalue.//writelogstillwrite_logistrue.}//destroylogmessage.}}voidlogger__set_logging(intp_write_log){//otherthreadscanstart/stoploggingbylogger

c++ - 动态 boost 线程运行存储在具有共享指针的 vector 中的对象的方法

我有一个摄像头类,它是网络摄像头的抽象。该类有一个方法rxImageThread(),它本质上是一个图像服务器。我想在n个线程中为n个摄像机运行n个服务器,其中n是动态设置的(来自配置文件)。相机对象存储在一个vector中:std::vector>cameras;我在循环中创建相机对象:cameras.push_back(boost::shared_ptr(newcamera(ip,controlPort,dataPort,imagePort,name)));我有一个vector来存储线程:std::vector>threads;在一个循环中,我想让每个摄像头的rxImageThre

c++ - 安全销毁线程池

考虑以下用C++14编写的普通线程池的实现。threadpool.hthreadpool.cpp观察每个线程都在休眠,直到它被通知唤醒——或一些虚假的唤醒调用——并且以下谓词计算为true:std::unique_locklock(this->instance_mutex_);this->cond_handle_task_.wait(lock,[this]{return(this->destroy_||!this->tasks_.empty());});此外,观察ThreadPool对象使用数据成员destroy_来确定它是否被销毁——析构函数已被调用。将此数据成员切换为true将通知

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++ - 如何实现多线程访问的类锁对象

假设我有以下过度简化的类,并希望保护资源免受多线程访问。我怎样才能像类锁一样合并某些东西,其中每个进入公共(public)接口(interface)的“入口点”首先必须在被允许使用该接口(interface)之前获得一个类锁?classMyClass{public:voidA();voidB();voidC();voidD();voidE();private:SharedResource_res;}voidMyClass::A(){B();C();D();E();}voidMyClass::B(){//dosthwith_res}voidMyClass::C(){//dosthwith

c++ - 在单线程应用程序中在堆栈上分配大量内存是否可以?

我知道如果你有一个多线程应用程序,并且你需要分配大量内存,那么你应该在堆上分配。堆栈空间在应用程序的线程之间划分,因此当您创建新线程时,每个线程的堆栈大小会变小。因此,如果您试图在堆栈上分配大量内存,它可能会溢出。但是,假设您有一个单线程应用程序,堆栈大小是否与堆大小基本相同?我在别处读到,堆栈和堆在地址空间中没有明确定义的边界,而是相互生长。附言被分配对象的生命周期不是问题。对象首先在程序中创建,并在退出时清理。我不必担心它会超出范围,从而从堆栈空间中清除。 最佳答案 不,堆栈大小与堆大小不同。堆栈对象以后进先出的方式被压入/弹出