等待其他线程继续

wait for other thread to proceed

本文关键字:继续 线程 其他 等待      更新时间:2023-10-16

在C++中,我有以下示例实现:

#include <thread>
#include <iostream>
void doSomeWork( void )
{
    std::cout << "hello from thread..." << std::endl;
    while(true)
    {
       printf("Getting inside doSomeWorkn");
       sleep(1);
    }
}
int main( int argc, char *argv[] )
{
    std::thread t( doSomeWork );
    t.join();
    processing();
    return 0;
}
void processing()
{
   while(true)
   {
      printf("Getting inside processingn");
      sleep(1);
   }
}

我有一个问题,doSomeWork()一直在做事情,它阻止了处理()。我认为线程是异步的,所以在它睡觉的时候,我可以做其他事情。我的问题是如何在doSomeWork()中休眠并生成其他线程,然后恢复doSomeWork()?

t.join();

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

将代码更改为

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

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

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

然而,请注意,detach的意思类似于"我对这个线程不感兴趣,所以它可能随时终止"或"我将通过某种同步机制同步线程"。基本上,当你有一些外部(线程)同步机制,所以你不想使用联接时,就会使用它。通常每次都使用join,但只有在需要时才使用detach。在您的特定情况下,您有带有永久循环的同步机制,所以使用detach是完全可以的,但要注意它们的差异。