草庐IT

【JavaEE】线程池

全部标签

c++ - Linux 编程中的线程安全变量

我正在编写一个共享库,它将允许链接的应用程序查询资源。资源类仅使用静态方法实现(见下文)。它还使用一个全局对象(在匿名命名空间中很好地限定范围)。使用全局变量的原因是我不想将库的用户暴露给系统内部。我想我本可以使用pimpl习惯用法,但这仍然没有解决线程安全问题。类看起来像这样://HeaderclassA{public:staticintfoo();staticdoublefoobar();};//Sourcenamespace{SomeResourceObjectglobvar;//一些使用这个库的应用程序将是多线程的,因此可能会从不同的线程调用A上的方法。因此我的问题是如何实现g

c++ - 我怎么知道boost线程是否完成?

我正在使用boost::thread来处理队列中的消息。当第一条消息到来时,我启动一个消息处理线程。当第二条消息到来时,我检查消息处理线程是否完成。如果完成了我会开始一个新的如果没有完成,我什么都不做。我怎么知道线程是否完成了?我尝试使用joinable()但它不起作用,因为当线程完成后,它仍然可以连接。我也试过一次性打断进程,在我的线程末尾添加一个中断点,但是没有用。谢谢编辑:我想让我的线程休眠一段不确定的时间,并在触发信号时唤醒。这样做的意思是boost::condition_variable 最佳答案 据我所知,您应该使用jo

c++ - test_and_set 线程的这种用法安全吗?

一直在思考如何实现无锁单向链表。老实说,我没有看到很多防弹方法。即使是使用CAS的更强大的方法最终也会有一定程度的ABAproblem.所以我开始思考。部分无锁系统难道不会比总是使用锁更好吗?一些操作可以是原子的和无锁的吗?如果我能做到这一点,它应该仍然是线程安全的。那么,进入正题。我在想一个简单的单向链表。2主要操作。push和pop。push总是在前面插入。像这样:voidpush(intn){T*p=newT;p->n=n;p->next=root;root=p;}pop总是取第一个元素。像这样:T*pop(){T*p=root;root=root->next;returnp;}

c++ - C++中的线程安全

我有如下关于线程安全的问题(我只有两个线程,其中一个线程只从映射中读取,其他线程将写入和读取,如图所示)://Thread2:thereadingandwritingthreadunordered_map*>testMap;//needlockbecausewritingtothemap?testMap[1]=newunordered_map;//donotneedlockbecauseonlyreadingandtheotherthreadisonlyreading?unordered_map*ptr=testMap[1];//needlockbecausewriting?(*ptr

c++ - 如何安全地从一个线程读取变量并从另一个线程修改它?

我有一个在多个线程中使用的类实例。我正在从一个线程更新多个成员变量并从一个线程读取相同的成员变量。维护线程安全的正确方法是什么?eg:phthread_mutex_lock(&mutex1)obj1.memberV1=1;//unlockhere?我应该在这里解锁互斥量吗?(如果现在另一个线程访问obj1成员变量1和2,访问的数据可能不正确,因为memberV2还没有更新。但是,如果我不释放锁,另一个线程可能会阻塞,因为有耗时操作下面。//performsometimeconsumingoperationwhichmustbedonebeforetheassignmenttomembe

c++ - boost进程间容器适契约(Contract)进程线程共享存储吗?

我需要一个vector容器在同一进程的两个线程之间共享,为以下方法提供互斥保护访问:emptysizeerasepush_back我还希望集合提供一个迭代器,它在使用迭代器时锁定容器。本质上,我正在寻找一个std::vector的集合界面,但具有并发访问保护,但我似乎找不到任何东西。是boost::interprocess适合这种应用的容器?如果没有,是否有更合适的替代方案,还是我必须自己编写? 最佳答案 答案是肯定的——它是合适的。Seehere 关于c++-boost进程间容器适契约

多线程系列(六) -等待和通知模型详解

一、简介在之前的线程系列文章中,我们介绍了synchronized和volatile关键字,使用它能解决线程同步的问题,但是它们无法解决线程之间协调和通信的问题。举个简单的例子,比如线程A负责将int型变量i值累加操作到10000,然后通知线程B负责把结果打印出来。这个怎么实现呢?其中一个最简单的办法就是,线程B不断的通过轮询方式while(i==10000)检查是否满足条件,这样就可以实现了。虽然这种方式可以实现需求,但是也带来了另一个问题:线程B中的while()操作不会释放CPU资源,会导致CPU一直在这个方法上做判断操作,极大的浪费CPU资源。我们知道CPU资源是非常非常昂贵的,因为使

c++ - 关于线程的问题

我是线程编程的新手,我有一个概念上的问题。我正在做矩阵乘法作为我类(class)的一个项目。但是,我在不使用线程的情况下执行此操作,然后使用线程为答案矩阵的每个单元格计算标量积,然后再次将第一个矩阵分成多个比例,以便每个线程都有相等的部分要计算。我的问题是标量乘积实现完成得非常快,这是我所期望的,但是第三个实现并没有比非线程实现更快地计算出答案。例如,如果它使用2个线程,它会在大约一半的时间内完成计算,因为它可以同时处理矩阵的两半,但事实并非如此。我觉得第三个实现有问题,我不认为它是并行运行的,代码如下。谁能直接告诉我这个?并非所有代码都与问题相关,但我将其包括在内以防问题不是本地的。

c++ - 如何使用 vtk 实时可视化在另一个线程中运行的计算

我想使用可视化工具包在另一个线程中实时可视化正在运行的计算。计算吐出一组新的值,以便在每次迭代时可视化,图形线程必须知道这些并加载新值。一种方法是让主线程轮询计算的状态。理想情况下,我不想进行任何轮询,但如果没有其他方法,我会进行。我能想到的最好方法是让计算线程在每次计算迭代时将一个事件推送到主线程的事件队列中,然后由GUI进行处理。我不确定如何去做,或者是否可以以线程安全的方式完成。我在Linux上使用pthreads在gcc/C++中使用vtk。 最佳答案 在主线程中使用vtkCommand(或适当的派生类)监听您感兴趣的对象的

每天学一点之多线程

多线程一、相关概念并发与并行并行(parallel):指多个事件任务在同一时刻发生(同时发生)。并发(concurrency):指两个或多个事件在同一个微小的时间段内发生。程序并发执行可以在有限条件下,充分利用CPU资源。单核CPU:只能并发多核CPU:并行+并发线程与进程程序:为了完成某个任务和功能,选择一种编程语言编写的一组指令的集合。软件:1个或多个应用程序+相关的素材和资源文件等构成一个软件系统。进程是对一个程序运行过程(创建-运行-消亡)的描述,系统会为每个运行的程序建立一个进程,并为进程分配独立的系统资源,比如内存空间等资源。线程:线程是进程中的一个执行单元,负责完成执行当前程序的