在下面的代码中,有使用 PPL 实现的 parallel_for 循环。主要问题在这里;当我被注释 cs.lock() 和 cs.unlock() 时,abc 向量值不正确。我正在使用 concurrency_vector 类型来随机访问数组值,但它似乎不起作用。锁定关键部分,它工作但很慢。此外,为了加快速度,我使用索引来存储值,而不是使用 2D-concurrency_vector。有什么问题,没有锁定关键部分,我错过了什么?
#include <iostream>
#include <ppl.h>
using namespace concurrency;
using namespace std;
int test_function()
{
critical_section cs;
concurrent_vector< double > abc( 300 * 400, 1000 );
parallel_for ( 0, 1000, [ & ]( int k ) {
for ( int y = 0; y < 300; y++ ) {
for ( int x = 0; x < 400; x++ ) {
/// k is using with some calculations for thr
cs.lock();
if ( thr < abc[ 400 * y + x ] ) {
abc[ 400 * y + x ] = thr;
}
cs.unlock();
}
}
} );
}