Re: race condition
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 02.09.09 19:27
Оценка: 51 (4)
Да, это race condition. Используется ячейка массива, которая вычисляется другим потоком. И естественно ячейка может быть использована до того, как туда будет помещено нужное значение. Классика. Этот пример приводит Intel в нескольких своих документах. Я тоже его использовал в статье Parallel Lint, описывая возможности Intel C++ Compiler (смотри раздел Static Analysis Implemented in Intel C++ Compiler). Кстати, это настолько классический паттерн, что Intel С++ выдает на него предупреждение в режиме /Qdiag-enable:sc-parallel{1|2|3}. Наш анализатор VivaMP пока молчит, но скоро тоже научится ругаться и на это.

Как исправить. Тут дело сложнее. Самое верное видимо будет избрать другой алгоритм вычисления. Тут аналогия такая. Нет никакого смысла как-то мучиться, пытаясь распараллелить, например, сортировку пузырьком. Просто следует использовать алгоритм параллельной сортировки (см. статью "Параллельные алгоритмы обработки данных").
race condition openmp parallel ошибка
race condition
От: Аноним  
Дата: 02.09.09 16:50
Оценка: :))
1. Это race condition? Почему?

2. как разрулить?

#pragma omp parallel for. 
     for (int i=2; i < 10; ++i).
     {.
        fact[i] = i * fact[i-1];.
     }.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.