2个期货之间的依赖

Dependency between 2 futures

请看下面的代码。

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,而且我不知道如何强制程序在单个线程上 运行。

这个程序不会 运行 无限,一旦 f2() 被第二个线程调用,它就会将 cond 设置为 false

根据 Async 的定义: 模板函数 async 运行s 函数 f 是异步的(可能在一个单独的线程中,它可能是线程池的一部分)和returns 一个 std::future 最终将保存该函数调用的结果。

有3个线程 主线程: f1线程: f2 线程:

流量将是:

  1. 主线程
  2. f1线程启动---f1体根据线程生命周期执行
  3. f2 线程启动 --- f2 主体执行并设置 cond

f2何时获得机会取决于线程调度和阻塞状态 例如:如果你在 f1 中睡觉,f2 将有机会

我很想看看其他人的答案