поток делает её инкремент 10 тысяч раз и второй делает инкремент 10 тысяч раз. В результате в переменной будет какое-то неожиданное значение, связанное с состоянием гонки. Здесь всё понятно. Вопрос в следующем. Разве операции над интом не являются атомарными с точки зрения железа? Ну... С точки зрения логики это должно быть так. Что вообще могло пойти не так? Планировщик снял поток с выполнения до того, как успел сделаться инкремент инта?
Инкремент это не одна операция
i++ не атомарен
Нет, это не так
Чтобы они стали атомарными, нужно сделать их атомарными. Это отдельные инструкции, потенциально медленее обычных
Я знаю, что такое атомарные операции. Вопрос был не в этом
Стандарт не требует делать инкремент атомарно, по этому компилятор генерирует код без атомарного инкремента.
Обсуждают сегодня