2期货之间的依赖关系

时间:2018-06-11 09:41:02

标签: c++ multithreading asynchronous concurrency future

请参阅下面的代码。

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并且我不知道强制程序在单个线程上运行的方法。

1 个答案:

答案 0 :(得分:1)

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

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

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

流程将是:

  1. 主线程
  2. f1线程启动--- f1主体根据线程生命周期执行
  3. f2线程开始--- f2 body执行并设置 cond
  4. 当f2获得机会时,取决于线程调度和阻塞状态 例如:如果你在f1睡觉,f2就会有机会

    我很想看到别人的答案