В общем случае для int num, num++ (или ++num) в качестве операции чтения-изменения-записи не является атомным. Но я часто вижу компиляторы, например GCC, генерирует для него следующий код (попробуйте здесь):
Так как строка 5, соответствующая num++, является одной инструкцией, мы можем заключить, что num++ является атомарным в этом случае?
И если да, означает ли это, что сгенерированный num++ может использоваться в параллельных (многопоточных) сценариях без какой-либо опасности рас сканов данных (т.е. нам не нужно делать это, например, std::atomic<int> и налагать связанные затраты, так как в любом случае это атом)?
UPDATE
Обратите внимание, что этот вопрос не в том, является ли приращение атомарным (это не так, и это была и есть начальная строка вопроса). Это может быть в конкретных сценариях, то есть, может ли однонаправленный характер использоваться в определенных случаях, чтобы избежать накладных расходов префикса lock. И поскольку в принятом ответе упоминается раздел об однопроцессорных машинах, а также этот ответ, разговор в его комментариях и других объясняет, он может (хотя и не с C или С++).
