Мне известен этот вопрос , но я считаю, что мои опасения очень разные.
Я недавно создал приложение SDL, используя потоки и OpenGL. У меня есть один поток, работающий в цикле, который постоянно обновляет состояние объектов, которые я рисую на экране. Состояния очень просты, это просто логический массив (когда значение массива истинно, я рисую его, когда оно ложно, нет).
В настоящее время у меня нет блокировки мьютекса ни для одной из моих переменных, и все работает просто отлично. Даже если между рисованием обновлялась только половина массива состояний, частота кадров намного выше (или, по крайней мере, равна) частоте обновления, поэтому было бы приемлемо иметь состояние с половиной обновлений.
Теперь я начал работать над идеей, аналогичной этой, во встроенной системе с использованием прерываний. Время от времени прерывание будет запускаться, обновлять массив состояний, и выполнение будет продолжаться. Теперь, когда я нахожусь на многоядерном рабочем столе и одновременно обновляю массив, мне интересно, почему ничего плохого не происходит, поскольку я технически читаю и записываю в одну и ту же область памяти в то же время .
- Это случайно или по какой-то причине нарушения доступа к памяти не происходят?
- Если допустимо изменение состояния переменной непосредственно перед, во время или сразу после использования значения, стоит ли беспокоиться об использовании блокировки мьютекса?
Спасибо за вашу помощь.
Редактировать: Дополнительная информация - массив создается динамически, но когда он создается / удаляется, я использую мьютекс (я полагал, что доступ к удаленной памяти не будет любезным: P).