Рассмотрим похожий пример: "многопоточный" поиск максимума
C++ (Qt)
if (theMaxA > localA) {
// что-то делаем полагая >
}
Если текущий найденный максимум уже больше - то нечего и блокировки брать. Здесь внимание обычно сосредоточено на второй части, там примитивная ловушка
C++ (Qt)
else {
QMitexLocker lock(&mutex);
if (localA > theMaxA) // вот ловушка, theMaxA мог измениться пока брали мутекс, нужно опять проверить
theMaxA = localA;
}
При этом упускается из виду что
if срабатывает всегда верно без блокировок, ну как бы "по алгоритму" или "по построению". Как то же самое сделать для == (вместо >)?