Не только атомарные объекты, любой примитив , который можно использовать с операциями, выполняемыми одновременно выполняемыми потоками:
- мьютекс
- переменная условия
- семафор
- барьер
- атомные объекты ...
по определению полезны только при наличии расы , непредсказуемость в схеме доступа.Если доступ был упорядочен предсказуемым образом, вы бы использовали обычный изменяемый объект на языке программирования.
Но даже если порядок априори неизвестен, конечный результат можетбудьте детерминированными: рассмотрите одновременное выполнение потоков, обслуживающих страницы для статического веб-сервера, с количеством страниц и байтов, которые служат единственной изменяемой структурой данных.Статистику можно хранить в структуре данных, защищенной мьютексом (мьютекс не нужен, это просто простой пример): порядок блокировки мьютекса непредсказуем, но в результате структура данных содержит сумму страниц.и байты обслуживаются;не имеет значения, в каком порядке каждый поток добавляет счет к общим данным.