C++14的建议之一是Resumable Functions,它为C++提供了今天在C#中可用的异步/等待机制。其基本思想是,函数可以在等待异步操作完成时暂停。当异步操作完成时,函数可以从暂停的位置恢复。这是以非阻塞的方式完成的,因此调用可恢复函数的线程将不会被阻塞。
对于我来说,在哪个上下文(线程)中恢复函数并不明显。它将由暂停函数的线程恢复(据我所知,这是在C#中如何完成的),还是使用另一个线程?
如果它被暂停的线程恢复,线程是否必须处于某种特殊状态,或者调度器是否会处理此问题?
发布于 2013-06-19 18:12:35
引用N3564的话:
挂起后,可恢复的函数可由运行时的调度逻辑恢复,并最终完成其逻辑,此时它将执行返回语句(显式或隐式)并在占位符中设置函数的结果值。
因此,需要注意的是,函数从外部(调用者)观察到的行为和从内部观察到的行为之间存在不对称性:外部视角是函数在第一个挂起点处返回类型为future的值,而内部视角是函数通过return语句返回类型T的值,返回future/shared_future的函数的行为仍然略有不同。
可恢复函数可以在其执行暂停之后在恢复之后继续在另一个线程上执行。
这本质上意味着
future<T>
不必处于就绪状态)。https://stackoverflow.com/questions/16882055
复制相似问题