Семафор (semafor)
Суть
Семафор — примитив синхронизации со счётчиком. wait() уменьшает счётчик и, если он стал отрицательным, блокирует поток до тех пор, пока кто-то не вызовет signal() (увеличивает счётчик и будит одного ждущего). Семафор со значением N пропускает в секцию не более N потоков одновременно; с начальным значением 0 он работает как «сигнал о событии».
В iOS три семейства API:
- GCD:
DispatchSemaphore(value:),wait(),wait(timeout:),signal()— то, что имеют в виду на интервью. - POSIX:
sem_init,sem_wait,sem_post,sem_destroy. - Mach:
semaphore_create,semaphore_wait,semaphore_signal,semaphore_destroy— ядро, в прикладном коде не используется.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep