C++: защита разделяемой памяти OpenMP

Если я использую общую переменную, скажем, двойную, для вычисления какой-то суммы во время выполнения программы. Будет ли это в любом случае уязвимо для нестабильных операций? Я имею в виду, возможно ли, чтобы несколько ядер обращались к этой переменной асинхронно и вызывали нестабильные результаты?

Например: это глобальная переменная:

double totalTime = 0;

и в каждом ядре вызывается команда:

totalTime += elapsedTime;

Эта последняя операция/инструкция выполняется путем получения значения totalTime, помещения его в регистр ЦП, а затем выполнения сложения. Я могу представить, что несколько ядер будут принимать одно и то же значение в один и тот же момент, а затем добавлять новое значение elapsedTime, а затем значение, хранящееся в totalTime, будет перезаписано неправильным значением из-за задержки. Это возможно? и как я могу это решить?

Спасибо.

6
задан 11 June 2012 в 10:03
поделиться