请参阅下面的代码。
int cond = true;
void f1()
{
while(cond)
{
}
}
void f2()
{
cond = false;
}
int main()
{
auto fut1 = std::async(f1);
auto fut2 = std::async(f2);
fut1.get();
fut2.get();
}
我的问题是,这个程序会在单线程sw / hw上无限运行吗? 我无法测试这个因为我的std :: hardware_concurrency显示8并且我不知道强制程序在单个线程上运行的方法。
答案 0 :(得分:1)
这个程序无法无限运行,只要第二个线程调用f2(),它就会将 cond 设置为false
根据Async的定义: 模板函数 async 异步运行函数f(可能在一个单独的线程中,可能是线程池的一部分)并返回一个std :: future,最终将保存该函数调用的结果。
有3个主题 主线程: f1线程: f2线程:
流程将是:我很想看到别人的答案