我对 C++11 std::future
的一些事情感到困惑。我想动态平衡工作负载,所以如果有一些处理器空闲,我创建一个 std::future
和 std::async
来划分剩余的数据。它工作正常。
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
不是我能控制的,return后还运行吗?我怎样才能终止它们以释放它们使用的 CPU 时间?
最佳答案
C++ 标准不提供取消 future 或停止线程的方法。这是有原因的。
没有办法知道线程是否可以在某个特定时刻安全地停止。线程可能已经获取了应该最终确定的资源。只有运行中的线程自己知道何时可以安全停止。
即使底层的低级 API 提供了调用来随意杀死任何线程,但由于上述情况,这绝对不是一个好的方法。
这个问题的传统解决方案是向线程发送信号并从内部取消它。简单的实现可能基于单个原子 bool
标志。
关于c++ - 如何终止 std::future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653022/