0

从网站 cppreference.com 中,我了解到:“如果在策略中同时设置了 std::launch::async 和 std::launch::deferred 标志,则执行异步执行还是延迟评估取决于实现。 "

如何理解“是执行异步执行还是延迟评估的实现”。如果我为它们都设置了标志,那么,这是在新线程中执行还是在本地线程中延迟执行?

4

2 回答 2

1

如果您同时使用两者std::launch::async,并且std::launch::deferred您告诉实现您不在乎它使用哪一个。如果你在乎,不要说你不在乎。选择你想要的那个。

于 2013-11-05T13:14:08.347 回答
1

如何理解“执行异步执行还是延迟评估的实现”。

好吧,就像它所说的那样。当两个标志都设置时,实现自行决定是在新的/不同的线程中开始计算(对应于std::launch::async)还是使用惰性求值(对应于std::launch::deferred)。后者意味着它不会运行任何计算,直到您查询返回的未来,使用std::future::getstd::future::wait和朋友,这将导致计算在“本地”线程中执行。

如果我为它们都设置了标志,那么,这是在新线程中执行还是在本地线程中延迟执行?

如上所述,在这种情况下,由实现决定做什么,每次调用时它都可能不同std::async(std::launch::async | std::launch::deferred, ...)

于 2013-11-05T10:40:20.783 回答