Я знаю, что при чтении из места памяти, которое написано несколькими потоками или процессами, ключевое слово volatile должно использоваться для этого местоположения, как в некоторых случаях ниже, но я хочу узнать больше о том, какие ограничения действительно ли это делает для компилятора и в основном какие правила компилятор должен соблюдать при работе с таким случаем и есть ли какой-либо исключительный случай, который, несмотря на одновременный доступ к ячейке памяти, может быть проигнорирован программистом.
volatile SomeType * ptr = someAddress;
void someFunc(volatile const SomeType & input){
//function body
}