Защищены ли атомные объекты от расы? - PullRequest
0 голосов
/ 02 марта 2019

Насколько я знаю, это не так.

Атомные объекты свободны от гонок данных, но все же они могут страдать от гонок: два потока могут запускаться в непредсказуемом порядке, что делает результат программы недетерминированным.

Совместно используемые данные будут "безопасными" (защищенными атомами), но последовательность или время могут все еще быть неправильными.

Можете ли вы подтвердить это?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Не только атомарные объекты, любой примитив , который можно использовать с операциями, выполняемыми одновременно выполняемыми потоками:

  • мьютекс
  • переменная условия
  • семафор
  • барьер
  • атомные объекты ...

по определению полезны только при наличии расы , непредсказуемость в схеме доступа.Если доступ был упорядочен предсказуемым образом, вы бы использовали обычный изменяемый объект на языке программирования.

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

0 голосов
/ 02 марта 2019

Да, вы правы, что неатомарные операции могут все еще иметь состояние гонки.Если у вас есть неатомарные операции, которые зависят от состояния атомарного объекта без вмешательства со стороны других потоков, вам необходимо использовать другой метод синхронизации для поддержания согласованности.

Атомарные операции над атомарным объектом будут согласованными, но не свободными от гонки.Неатомарные операции с использованием атомарного объекта не свободны от гонки.

...