线程::加入与分离
Thread::Join vs detach
为什么要使用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;
}
您现在具有争用条件。您的线程可能会也可能不会完成在需要打印之前需要value
完成的所有工作。*
join
视为一种像mutex
这样的同步形式;您必须等待正在执行的线程释放互斥锁(完成(才能继续。
有时分离线程是有意义的,如果说,它可以"在后台工作"执行可能不是关键任务的任务。
我认为多线程的目的是,我启动更多的线程平行[原文如此]
您不会被迫在创建线程后立即join
线程。您可以创建 N 个线程,然后执行其他一些工作。只有当你想保证一个线程已经完成时,你才需要join
。
*为了解释起见,此示例过于简化。线程创建通常发生在main
之外的其他对象或函数中。是否分离通常从您的设计中很明显。(但是,我们必须始终detach
或join
std::thread
,以免超出范围(
相关文章:
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 检查分离的线程是否还活着?
- 为什么分离线程没有得到输出消息
- 如何"stop"正在等待条件变量的分离线程?
- 线程::加入与分离
- C++ 11 线程在分离后会自动销毁吗?
- 分离的线程:在繁忙时销毁互斥锁 错误C++
- 分离线程然后让它超出范围(并使其仍在运行)是否安全?
- 自终止线程.使用联接或分离
- 为什么 std::call_once 在联接和分离的线程中的行为不同?
- 重用分离的线程
- 为什么线程分离时程序挂起
- 无法永远分离线程 c++
- 访问全局或静态对象的分离线程
- 为什么std::async与简单的分离线程相比速度较慢
- 如何在 Windows C++ 上分离线程
- c++中分离线程的资源释放
- c++分离线程在其关联对象被删除后继续工作
- 分离线程执行结束
- c++ 11线程是否提供了一种在主线程退出后分离线程继续的方法?