в приведенном ниже коде есть цикл parallel_for, реализованный с помощью PPL. Основная проблема здесь; Значения вектора abc неверны, когда я был прокомментирован cs.lock() и cs.unlock(). Я использую тип 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();
}
}
} );
}