并发::when_all的结果是 FIFO 吗?
Are results of concurrency::when_all's return vector FIFO?
Concurrency::when_all 函数返回一个std::vector<T>
,其中包含它等待的所有任务的返回值。
向量中的值是按任何类型的顺序排列,还是按任务完成的顺序排列?
我也无法从Microsoft文档中找到。做了一个简单的测试,线程以某种方式以随机顺序结束,但最终输出是 1,2,3,4,5。您可以创建具有不同随机负载的 100 个线程,我认为结果不会改变。结论是你可以安全地使用它与这个假设。
#include <ppltasks.h>
#include <array>
#include <iostream>
using namespace concurrency;
using namespace std;
int wmain()
{
// Start multiple tasks.
array<task<int>, 5> tasks =
{
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 1: " << i << endl;
}
return 1;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 2: " << i << endl;
}
return 2;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 3: " << i << endl;
}
return 3;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 4: " << i << endl;
}
return 4;
}),
create_task([]() -> int {
for (int i = 0; i < 100; i++) {
wcout << "thread 5: " << i << endl;;
}
return 5;
})
};
auto joinTask = when_all(begin(tasks), end(tasks)).then([](vector<int> results)
{
for_each(begin(results), end(results), [](int a) {
wcout << a << endl;
});
});
joinTask.wait();
}
相关文章:
- 为什么这个程序的结果是3 "born"?和 4 死
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么双算的结果是错误的?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- 是迭代器增量结果是新的迭代器
- 结果是不同的;C++ 中的 recv(sock,buf,sizeof(buf),0) 和 strlen(buf)
- 非常量表达式的左值到右值转换的结果是常数吗?
- 将Execl命令的结果(是目录列表)输送到父进程
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- decltype( (A{}.int_member) 的正确结果是什么)
- 当我们在int上进行操作时,结果是暂时存储在int中的结果
- 大端序中的以下代码的结果是什么
- 并发::when_all的结果是 FIFO 吗?
- 递归宏点差的结果是什么
- static_casting constexpr void* 的结果是常量表达式吗?
- 将双精度转换为 int 的结果是错误的