Это перевод статьи The Swift Actor Pitfall: Understanding and Managing Reentrancy.
Введение
Сегодня я обсуждаю эту важную тему “Подводные камни Swift Actor”, так что если вы работали со Swift довольно долго, скорее всего, вы сталкивались с этим. Позвольте мне дать вам быстрое определение акторов actor
— это ссылочный (reference) ТИП, похожий на класс class
, но в отличие от классов позволяет только одной задаче получать доступ к своему изменяемому состоянию в один конкретный момент времени.
Так что, как мы все знаем, гонка данных (data race) происходит только тогда, когда несколько задач пытаются получить доступ к одному и тому же изменяемому состоянию в одно и то же время. Это означает что при использовании акторов actor
мы можем эффективно предотвратить гонки данные. Так ли это?
К сожалению, ответ “Нет” и причина в том, что есть actor reentrancy. Что собой в действительности представляет собой actor reentrancy и чем же actor reentrancy отличается от данных гонки (data race)?
Читать далее