c++ - 平行推回向量的向量
问题描述
我有一个向量的向量。我以并行方式构造这个向量,向量中的每个索引都由单个线程处理。与此类似的东西:
vector<vector<int> > global_vec(10, vector<int>({}));
#pragma omp parallel for schedule(dynamic)
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < i * 5; j++)
{
global_vec[i].push_back(i);
}
}
我知道如果我事先知道每个向量的大小,我可以在开始时分配所需的大小,然后就不会有问题了。但这不能由我完成,我需要动态推回。这个线程安全吗?
提前致谢。
解决方案
是的,这是线程安全的,因为内部向量仅由一个线程修改。您可以省略schedule(dynamic)
导数,但仍然可以保存。
如果您使用std::iota
.
vector<vector<int> > global_vec(10, vector<int>({}));
#pragma omp parallel for schedule(dynamic)
for(int i = 0; i < 10; i++)
{
global_vec[i].resize(i * 5) ;
std::iota(global_vec[i].begin(), global_vec[i].end(), 0);
}
附言。如果您的外部向量具有固定大小,请考虑使用 astd::array<vector<int>, 10>
代替。
推荐阅读
- python - 当数据量很大时,如何正确绘制数据框的两列?
- azure-active-directory - 在 Azure Active Directory B2C 自定义策略中自定义用户界面
- sql-server - 修复 SQL Server 标识并恢复正确的编号顺序
- reactjs - 无法将状态数据作为道具发送到另一个组件
- ios - 单击 UISearchBar 时如何用 tableview 替换屏幕上的内容
- python - Python 3 - 格式化打印命令
- react-native - 必须在 React-native 中使用“新”错误调用类构造函数
- ruby-on-rails - 从独立页面在 ruby on rails 中添加关联值
- c# - 如何在 c# 中将特定条件项添加到 linq 到 sql 之后对某些元素进行分组
- prometheus - 如何用helm为grafana添加prometheus数据源?