最近在研究算法部分,想要将单线程的算法升级成为多线程。
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;//定义自己的结构体数组
问题记录:
在并行算法实现的过程中,出现了《量子力学波动》,即多次运行并行算法结果不一样且不正确,究其原因是在并行循环中使用了两个并行数组,并理所当然的认为他们是一一对应的,事实上,不同线程中对数组添加的元素的时候,中途就是不知道谁先插入进去,也就造成了数据紊乱,解决办法就是建立结构体,一行语句添加。