Компилятор не должен кэшировать такое глобальное значение при вызове функции.
Но я думаю, что ваш вопрос некорректен. Во-первых, мьютекс POSIX работает только тогда, когда вы придерживаетесь их семантики. Таким образом, вы должны применить некоторую дисциплину в своем коде для доступа только к глобальным переменным (в данном случае i
), откуда ваш мьютекс удерживается.
Во-вторых, пожалуйста, не думайте, что объявления volatile
предотвратят любой ущерб, который может вызвать такое несоблюдение правил доступа. Одновременное чтение и запись в память - тонкая тема.