n, j, k по умолчанию являются общими для потока, следовательно, это не работает. В настоящее время каждый поток пишет в n, j, k одновременно.
Зависит от того, что вы хотите сделать, хотя они должны быть частными или общими. Если они являются локальными для одного прохода цикла, вы можете объявить их как частные для потока, и это должно работать нормально (счетчик цикла, здесь i
, по умолчанию является частным потоком).
#pragma omp parallel for private(n,j,k)
for (int i = 0; i < 5; ++i)
{
n = doSomethingElse();
j = doOnceMore();
k = n + j;
}
Поскольку openmp не может угадать, какие целевые переменные имеют, ваша задача - рассказать прагме, как с ними обращаться. Вы найдете больше информации о пунктах и переменных здесь . На веб-странице openmp также есть очень хороший разговор о структурах данных и построении правильных параллельных областей.