繁体   English   中英

如何终止std :: future?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM