C++ Boost线程重用线程

4

我想要实现类似于这样的功能:

thread t; // create/initialize thread
t.launch(); // launch thread.
t.wait(); // wait
t.launch(); // relaunch the same thread

如何使用boost线程来实现这样的功能呢? 实际上,我需要一个持久的可重新启动的线程。
我希望避免工作队列,因为在我的情况下实现起来有些困难。
谢谢。
1个回答

6
您只需要让线程在循环中运行。它试图从队列中获取一个“工作”单元,执行工作,然后返回队列。当队列为空时,它会等待。
然后,您可以从另一个线程中将工作项插入队列,以便线程将它们执行。
重新阅读您的问题,您是说您希望主线程通知工作线程开始工作,但然后主线程必须立即开始等待工作线程完成?这意味着一次只有一个线程在运行。这没有任何意义。线程是为并发执行而设计的。
假设这不是您想要的,那么我想知道什么比简单的工作线程更简单。线程要么正在工作,要么正在等待。因此,您需要某种数据结构,以允许主线程和工作线程之间进行通信,使工作线程可以等待工作项到达,主线程可以发送工作项,这将唤醒工作线程,然后当工作项完成时,工作线程等待另一个工作项。

1
然而,在我的情况下,工作队列有些复杂。如果我有一个主线程分发工作(这就是我正在尝试做的),那么它将简单得多。 - Anycorn
@aaa - 请查看更新;除非完全摒弃线程,否则我不认为你能做得比这更简单了。 - Daniel Earwicker
工作结构是一个嵌套循环,具有奇怪的边界,并且并非所有线程都能处理所有工作。但是,我成功地实现了带有积压的平面任务队列。这可能是最终更可扩展的方法。 - Anycorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接