为什么我要使用std::thread::join
然后等到此线程结束?我认为多线程的目的是,我开始更多的线程。
我也可以“正常”调用函数,而不是join()
,而不是foo()
。
那么为什么他们的join()
?我不是唯一需要detach()
的东西吗?
答案 0 :(得分:4)
考虑一下这里发生的事情:
int value = 0;
void myWorkerFunction(){value = 1;}
int main()
{
std::thread t(myWorkerFunction);
t.detach();
std::cout << value << std::endl;
}
你现在有竞争条件。在value
需要打印之前,您的主题可能会或可能不会完成所需的所有工作。 *
将join
视为mutex
之类的同步形式;你必须等待执行线程释放互斥锁(完成)才能继续。
有时候分离一个线程是有意义的,如果说它可以“在后台工作”执行可能不是关键任务的任务。
我认为多线程的目的是,我开始更多的线程[原文如此]
创建后,您不会立即强制join
一个线程。你可以创建N个线程,然后去做其他工作。只有当您想要保证线程已完成时,才需要join
。
* 为了便于说明,这个例子过于简单了。通常,线程创建发生在main
之外的其他一些对象或函数中。从您的设计来看,是否分离是非常明显的。 (但我们必须始终detach
或join
std::thread
才能超出范围)