线程连接函数阻塞调用线程

boost::thread join function blocks calling thread

本文关键字:线程 调用 函数 连接      更新时间:2023-10-16
问题1:我读到,当你在创建一个线程后调用join时,它会阻塞调用它的线程,直到线程函数返回。我试图建立一个多客户端服务器,可以接受客户端,并为每一个创建线程。问题是,在第一个客户端加入并创建它的线程并调用join之后,侦听线程会挂起,直到完成。我能做些什么来使这个线程运行而不阻塞调用线程?(在c#中,我只调用Start(),调用线程保持正常运行)。

问题2:一般来说(我可能错过了什么),为什么有人想要一个阻塞线程?这有什么意义?调用一个普通的函数不是更容易更快吗?

如果有人能告诉我如何实现同样的事情,就像c#中的线程,这将是伟大的!

提前感谢!对不起,我的英语不好。

我怎么做才能使这个线程运行而不阻塞调用线程

您可以创建线程,然后在其上调用detach(),这样如果线程尚未终止,thread对象的析构函数就不会抛出异常。老实说,我建议在采用这种"即发即弃"的设计之前三思而后行。在c++ 11中,你可能想要调用std::async(在这种情况下,你可能想看看这个问题& a,其中提出了一个解决该函数当前缺点的方法)。

在一般情况下(我可能错过了什么),为什么有人想要一个阻塞线程?这有什么意义?调用一个普通的函数不是更容易更快吗?

好吧,如果你的程序除了等待任务完成没有其他事情可做,那么是的,我会说,只使用同步调用。但也可能是这样的情况:您的程序想要并行地执行某些操作,一旦完成,它可能需要等待异步计算结束才能继续执行。在这种情况下,它需要与线程连接。

    不要调用join()。只有当你想确保线程已经完成执行时才加入线程(例如,当你销毁拥有线程的连接管理器类时,你想确保线程已经完成执行)。
  1. 何时调用join()参见答案1。