首页 > 解决方案 > 2 个期货之间的依赖关系

问题描述

请看下面的代码。

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();
}

我的问题是,这个程序会在单线程软件/硬件上无限运行吗?我无法对此进行测试,因为我的 std::hardware_concurrency 显示为 8,而且我不知道如何强制程序在单个线程上运行。

标签: c++multithreadingasynchronousconcurrencyfuture

解决方案


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

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

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

流量将是:

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

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

我很想看看其他人的答案


推荐阅读