LINUX.ORG.RU

История изменений

Исправление Nervous, (текущая версия) :

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

Ссылочные типы данных как раз эту проблему и решают. Если два (или больше) потока одновременно делают swap! (замену значения) одному атому, успешно завершится только одна операция, а остальные будут автоматически перезапущены (и будут всегда видеть последнюю версию данных). Причём замена происходит атомарно и читатели, сделав атому deref (получить текущее значение), всегда видят консистентное значение, результат последней завершившейся на этот момент операции swap!/reset!.

Исходная версия Nervous, :

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

Ссылочные типы данных как раз эту проблему и решают. Если два (или больше) потока одновременно делают swap! (замену значения) одному атому, успешно завершится только одна операция, а остальные будут автоматически перезапущены (и будут всегда видеть последнюю версию данных). Причём замена происходит атомарно и читатели, сделав атому deref, всегда видят консистентное значение.