Должен ли я блокировать мьютекс для одной переменной?

Если одна 32-битная переменная совместно используется несколькими потоками, следует ли установить блокировку мьютекса вокруг переменной? Например, предположим, что 1 поток записывает в 32-разрядный счетчик, а второй поток читает его. Есть ли шанс, что 2-й поток может прочитать поврежденное значение?

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

Изменится ли ответ на этот вопрос, если я перейду на многоядерный система в будущем и переменная разделяется между ядрами? (при условии, что кэш-память используется между ядрами)

Спасибо!

11
задан Will 1 July 2011 в 20:56
поделиться