DevPrep

Все темы › Swift Concurrency (async/await, акторы)

Что такое reentrancy у actor и чем это опасно?

Senior PRO

Суть

Актор реентерабелен: когда его метод доходит до await и приостанавливается, актор не блокируется — он может начать выполнять другой вызов (в том числе тот же метод из другой задачи). Когда первый вызов возобновится, состояние актора может быть уже не тем, что он видел до await. Data race при этом невозможен (одновременно внутри актора всё равно одна задача), но ломаются инварианты: двойная загрузка, двойное списание, устаревший кэш. Это и есть race condition без data race.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store