【发布时间】:2016-04-02 12:39:35
【问题描述】:
下面的代码示例将有效地允许一次执行一个 1 个线程。保留对线程的引用,然后稍后调用“Thread.join”具有相同的效果。如何让这些线程以这样的方式运行,程序等待线程独立并行继续,然后退出?在我看来,必须使用其他一些内核对象信号机制。 (简而言之,使用 'join' 将主线程绑定到辅助线程不会让其他线程同时运行?)
int main() {
while (cin) {
getline(cin, input_line);
if (input_line.length()>0)
{
thread t = thread(SomeLengthyCheck, input_line);
t.join();
}
}
}
【问题讨论】:
-
"简而言之,使用 'join' 将主线程绑定到辅助线程不会让其他线程同时运行?" ——这个假设是完全错误的。只需启动仅休眠一秒钟的多个线程。然后,加入所有这些线程并观察整个程序需要多少时间。
-
@Ulrich 我指的是我上面的代码片段,因为在 while 循环中调用 'thread.join' 的效果甚至不会启动其他线程。在所有线程之后使用连接created 将允许其他线程继续运行直到完成(如下所述)。此外,我理解规范声明即使在主线程退出后线程也应该继续,但我对这种方法不满意......
标签: multithreading c++11