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 线程:
流量将是:
- 主线程
- f1线程启动---f1体根据线程生命周期执行
- f2 线程启动 --- f2 主体执行并设置 cond
f2何时获得机会取决于线程调度和阻塞状态
例如:如果你在 f1 中睡觉,f2 将有机会
我很想看看其他人的答案
请看下面的代码。
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 线程:
流量将是:
- 主线程
- f1线程启动---f1体根据线程生命周期执行
- f2 线程启动 --- f2 主体执行并设置 cond
f2何时获得机会取决于线程调度和阻塞状态 例如:如果你在 f1 中睡觉,f2 将有机会
我很想看看其他人的答案