c++ - 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,而且我不知道如何强制程序在单个线程上运行。
解决方案
这个程序不会无限运行,只要 f2() 被第二个线程调用,它就会将cond设置为 false
根据Async的定义:模板函数async 异步运行函数 f (可能在一个单独的线程中,该线程可能是线程池的一部分)并返回一个 std::future ,它最终将保存该函数调用的结果。
有3个线程主线程:f1线程:f2线程:
流量将是:
- 主线程
- f1线程启动---f1 body根据线程生命周期执行
- f2 线程启动 --- f2 body 执行并设置cond
f2 何时获得机会取决于线程调度和阻塞,例如:如果您在 f1 和 f2 中有睡眠,则将获得机会
我很想看看其他人的答案
推荐阅读
- c - EXECVP系统调用是否支持IO重定向
- sed - grep 到终端的所有 Gentoo Stage3 链接
- excel - VBA中列的总和
- javascript - 当网站不安全时是否可以触发 javascript 警报?
- javascript - 如何在javascript中的模板文字内调用onclick事件
- python - Pandas:如何使用列和条件来获得特定的 json?
- azure - 这个 Github Action 如何修改 deployment.yml 文件
- c# - 无法使用 Webhook 执行 Discord Bot 命令
- c++ - 为什么 Widget 类使用指针作为数据成员?
- c - 尝试制作我的第一个 C 程序,将秒转换为周 + 天 + 小时 + 分钟 + 秒