等待其他线程继续

时间:2013-02-22 15:20:42

标签: c++ multithreading thread-safety

在C ++中,我有这个示例实现:

#include <thread>
#include <iostream>

void doSomeWork( void )
{
    std::cout << "hello from thread..." << std::endl;
    while(true)
    {
       printf("Getting inside doSomeWork\n");
       sleep(1);
    }
}

int main( int argc, char *argv[] )
{
    std::thread t( doSomeWork );
    t.join();

    processing();

    return 0;
}

void processing()
{
   while(true)
   {
      printf("Getting inside processing\n");
      sleep(1);
   }
}

我遇到一个问题,即doSomeWork()继续做事并阻止处理()。我认为线程是异步的,所以当它正在睡觉时,我可以做其他事情。我的问题是如何在doSomeWork()中生成并生成其他线程,然后恢复doSomework()?

2 个答案:

答案 0 :(得分:6)

该行

t.join();

暂停调用线程,直到线程t完成(doSomeWork())返回。

将您的代码更改为

std::thread t( doSomeWork );
processing();
t.join();

如果您希望processing()doSomeWork()并行运行。

答案 1 :(得分:2)

t.join();替换为t.detach();

但请注意,detach表示“我在此线程中没有兴趣,因此可以随时终止”或“我将通过某种同步机制同步线程”。基本上,当你有一些外部(线程)同步机制,因此你不想使用连接时使用它。通常每次都使用join,但仅在需要时使用detach。在您的特定情况下,您具有永久循环的同步机制,因此使用detach绝对可以,但要注意它们的差异。