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