Hum*_*awi 1 c++ multithreading detach
我有函数foo:
void foo(){
//Command set A
std::this_thread::sleep_for(100s);
//Command set B
}
Run Code Online (Sandbox Code Playgroud)
第一部分是Command set A必须阻止执行.但是,该sleep部分并//Command set B不必阻止执行,也不会返回任何数据.
所以我实现如下:
void foo(){
//Command set A
std::thread t([](){
std::this_thread::sleep_for(100s);
//Command set B
}
t.detach()
}
Run Code Online (Sandbox Code Playgroud)
我detach在这里使用得当吗?它是正确的使用场所detach吗?有更好的解决方案吗?
detach很少是正确的解决方案.如果确切地说它:它删除了std::thread对象和实际线程之间的连接.线程一直运行直到它自己完成,但是如果你没有明确地实现与线程的通信(例如通过消息队列),你的程序就失去了对它的任何控制.
如果程序结束时线程仍处于活动状态,则会出现问题.你的进程正处于释放资源和死亡的过程中,但线程正在快速地使用其中一些资源.因为所有资源都被释放了,即使是最基本的资源(想想低级C++运行时),这也是desaster的一个秘诀.机会是,您的程序将在退出时崩溃.
寻找std::async直接的替代品.它以异步方式运行任务并立即返回a std::future.即使任务没有返回任何数据,那么未来是你可以保持的句柄,并且在程序退出时检查线程是否仍在运行 - 并且如果必要,等待它完成.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |