[英]How to terminate a std::future?
关于C ++ 11 std::future
事情让我感到困惑。 我想动态平衡工作负载,所以如果有一些处理器空闲,我用std::async
创建一个std::future
来划分剩余的数据。 它工作正常。
std::future<int> f[MAX_CHILD];
for ( each data item ){
if ( found_idle_processor )
f[i] = std::async( ... );
process();
}
// At last, query the result of f.
for ( each future )
hold = f[i].get();
但有时,一旦找到一些特殊数据项,所有其他数据将被丢弃,程序应立即给出最终结果,然后将启动另一个任务。
std::future<int> f[MAX_CHILD];
for ( each data item ){
if ( found_idle_processor )
f[i] = std::async( ... );
process();
if ( found_special_item )
return final_result;
}
// At last, query the result of each f.
for ( each future )
hold = f[i].get();
但是创建的f
不受我的控制,它们在返回后仍在运行吗? 如何终止它们以释放它们使用的CPU时间?
C ++标准没有提供取消未来或停止线程的方法。 这是有原因的。
无法知道线程是否可以在某个特定时刻安全停止。 线程可能已经获得了应该最终确定的资源。 只有正在运行的线程才知道何时可以安全停止。
即使底层的低级API提供了随意杀死任何线程的调用,由于上述情况,这绝对不是一个好的方法。
这个问题的传统解决方案是发出信号并从内部取消它。 一个简单的实现可能基于单个原子bool
标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.