首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++14中,可恢复的函数将在什么上下文中执行?

在C++14中,可恢复的函数将在什么上下文中执行?
EN

Stack Overflow用户
提问于 2013-06-02 18:52:46
回答 1查看 1.4K关注 0票数 20

C++14的建议之一是Resumable Functions,它为C++提供了今天在C#中可用的异步/等待机制。其基本思想是,函数可以在等待异步操作完成时暂停。当异步操作完成时,函数可以从暂停的位置恢复。这是以非阻塞的方式完成的,因此调用可恢复函数的线程将不会被阻塞。

对于我来说,在哪个上下文(线程)中恢复函数并不明显。它将由暂停函数的线程恢复(据我所知,这是在C#中如何完成的),还是使用另一个线程?

如果它被暂停的线程恢复,线程是否必须处于某种特殊状态,或者调度器是否会处理此问题?

EN

回答 1

Stack Overflow用户

发布于 2013-06-19 18:12:35

引用N3564的话:

挂起后,可恢复的函数可由运行时的调度逻辑恢复,并最终完成其逻辑,此时它将执行返回语句(显式或隐式)并在占位符中设置函数的结果值。

因此,需要注意的是,函数从外部(调用者)观察到的行为和从内部观察到的行为之间存在不对称性:外部视角是函数在第一个挂起点处返回类型为future的值,而内部视角是函数通过return语句返回类型T的值,返回future/shared_future的函数的行为仍然略有不同。

可恢复函数可以在其执行暂停之后在恢复之后继续在另一个线程上执行。

这本质上意味着

  • 当第一次被调用时,可恢复函数在其调用者的线程上下文中执行。
  • 在每个挂起点之后,实现可以自由地选择在哪个线程上继续可恢复函数的执行
  • 从调用代码的角度来看,可恢复函数的工作方式类似于异步函数,其中在函数调用返回时,(可观察的)行为的一部分被可靠地执行,但是最终结果可能还没有(返回的future<T>不必处于就绪状态)。
  • 作为程序员,你不需要跳转来获得一个可以恢复的函数。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16882055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档