Да, это
race condition. Используется ячейка массива, которая вычисляется другим потоком. И естественно ячейка может быть использована до того, как туда будет помещено нужное значение. Классика. Этот пример приводит Intel в нескольких своих документах. Я тоже его использовал в статье
Parallel Lint, описывая возможности Intel C++ Compiler (смотри раздел Static Analysis Implemented in Intel C++ Compiler). Кстати, это настолько классический паттерн, что Intel С++ выдает на него предупреждение в режиме /Qdiag-enable:sc-parallel{1|2|3}. Наш анализатор
VivaMP пока молчит, но скоро тоже научится ругаться и на это.
Как исправить. Тут дело сложнее. Самое верное видимо будет избрать другой алгоритм вычисления. Тут аналогия такая. Нет никакого смысла как-то мучиться, пытаясь распараллелить, например, сортировку пузырьком. Просто следует использовать алгоритм параллельной сортировки (см. статью "
Параллельные алгоритмы обработки данных").