Вот возник такой вопрос. Интересует чисто теоретически - на практике применять не буду. =)
Допустим, есть один поток, который изменяет переменную, и есть один поток, который ее считывает. Насколько безопасно это делать без мьютексов?
Вроде бы, на 32-ух разрядных машинах int укладывается в один регистр, а значит, насколько я понимаю, его запись атомарна, но если использовать на той же машине, к примеру, int64_t, который умещается только в два регистра, то такая запись не атомарна, и есть вероятность что при считывании из другого потока мы считаем число, у которого одна половинка будет новая, а другая - старая.
Я правильно рассуждаю, или все не так просто?
P.S.: про volatile я знаю. Насколько я понимаю, он запрещает только "кешировать" значение int'а в регистре между несколькими обращениями к переменной и ничего больше. Причем, также насколько я знаю, при вызове функции компилятор "сбрасывает" подобные кэши, исходя из предположения, что данная функция может как-то изменить данную переменную (просто присвоив значение, если она глобальная или через указатель, если она локальная).
А тут я прав? =)