c++ concurrency::parrallel_for 多线程及注意事项。

最近在研究算法部分,想要将单线程的算法升级成为多线程。

C++ ppl.h库就可以实现简单的并行。

话不多说,以后想起来了再补,直接上代码:

1.首先并行模式库ppl.h

#include<ppl.h>
#include<concurrent_vector.h>

2.并行for循环——concurrency::parallel_for()

int n=10;

for(int j=0;j<n;j++){
//代码段
}


concurrency::parallel_for(0, n, [&](int j){
//代码段
} );

//两者实现的作用都是相同的,但是要注意的是,在并行for循环中,实际上可能会发生同时操作的情况。例如两个cout输出会混着打印在同一部分内容中,因此在并行for循环中建议使用整个的结构体保持数据正确。

3.当然,可能还需要定义需要共享的数组

concurrency::concurrent_vector<struct myClass> myObject;//定义自己的结构体数组

问题记录:

        在并行算法实现的过程中,出现了《量子力学波动》,即多次运行并行算法结果不一样且不正确,究其原因是在并行循环中使用了两个并行数组,并理所当然的认为他们是一一对应的,事实上,不同线程中对数组添加的元素的时候,中途就是不知道谁先插入进去,也就造成了数据紊乱,解决办法就是建立结构体,一行语句添加。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值