DevPrep

Все темы › Многопоточность и асинхронное программирование

Что такое DispatchSemaphore и что будет, если забыть signal()?

Middle PRO

Суть

DispatchSemaphore — счётный семафор GCD. wait() уменьшает счётчик и блокирует поток, если счётчик стал отрицательным; signal() увеличивает и будит одного ждущего. DispatchSemaphore(value: N) ограничивает секцию N потоками; value: 0 используют, чтобы дождаться события.

Если забыть signal(), ждущий поток никогда не проснётся. Последствия зависят от того, кто ждёт:

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

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

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

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

Скачать DevPrep в App Store