【问题标题】:C++ boost thread reusing threadsC++ boost线程重用线程
【发布时间】:2011-02-09 04:27:19
【问题描述】:

我正在尝试完成这样的事情:

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

如何使用 boost 线程来实现这样的事情? 本质上,我需要持久的可重新启动线程。

我想避免工作队列,因为在我的案例中实现有点困难

谢谢

【问题讨论】:

    标签: c++ multithreading boost


    【解决方案1】:

    你只会让线程循环运行。它尝试从队列中取出一个“工作”单元,执行该工作,然后返回队列。当队列为空时,它会等待。

    然后,您可以从另一个线程将工作项插入队列,以便线程执行它们。

    再次阅读您的问题,您是说您希望您的主线程通知工作线程开始工作,但是主线程必须立即开始等待工作线程完成?这意味着一次只有一个线程在运行。那没有意义。线程是为并发执行而设计的。

    假设这不是您想要的,那么我想知道还有什么比一个从队列中运行的简单工作线程更简单的方法。线程正在工作或等待。所以你需要一些允许master和worker之间通信的数据结构,这样worker可以等待一个work item到达,master可以发送一个work item,这将唤醒worker,然后当work item完成时,工人等待另一个。

    【讨论】:

    • 这是替代方案。但是,在我的情况下,工作队列有些复杂。如果我有主线程分配工作(这是我正在尝试做的)会简单得多
    • @aaa - 查看更新;除非你完全摆脱线程,否则我看不出你怎么能做比这更简单的事情。
    • 工作结构是一个具有奇怪边界的嵌套循环,并非所有线程都可以处理所有工作。然而,我确实设法实现了带有积压的平面任务队列。这最终可能更具可扩展性
    猜你喜欢
    • 2013-02-03
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多