RoQ*_*riX -1 c++ multithreading c++11
为什么我要使用std::thread::join然后等到这个线程结束?我认为多线程的目的是并行启动更多线程。代替join(),我也可以“正常”调用该函数,例如foo(). 那么为什么是他们的join()?不是我唯一需要的东西detach()吗?
考虑一下这里发生了什么:
int value = 0;
void myWorkerFunction(){value = 1;}
int main()
{
std::thread t(myWorkerFunction);
t.detach();
std::cout << value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
你现在有一个竞争条件。您的线程可能会也可能不会完成它在value需要打印之前需要做的所有工作。*
考虑join是一种同步形式,如mutex; 您必须等待正在执行的线程释放互斥锁(完成)才能继续。
有时分离线程是有意义的,如果说,它可以只是“在后台工作”执行可能不是关键任务的任务。
我认为多线程的目的是,我并行地启动更多线程 [原文如此]
join创建线程后,您不会立即被强制使用该线程。你可以创建 N 个线程,然后去做一些其他的工作。只有当您想保证线程已完成时,您才需要join.
*为了便于解释,这个例子过于简单化了。线程创建通常发生在main. 是否分离通常从您的设计中很明显。(但是我们必须在它超出范围之前始终detach或joina std::thread)
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |