Примитивы синхронизации: NSLock, NSRecursiveLock, NSCondition



Для решения проблемы синхронизации данных в iOS есть множество решений. Начнем с базовых типов.



NSLock

Когда поток пытается заблокировать объект возможно два варианта, поток либо сможет это сделать и продолжит работу, либо будет ожидать пока другой поток, успевший раньше заблокировать объект, не вызовет unlock() тем самым освободив блокировку.



NSLock и другие блокировки Foundation несправедливы, в том смысле, что когда несколько потоков ожидает освобождения объекта блокировки, они не получат его в том порядке в каком они пытались наложить блокировку. При большом количестве потоков это может служить проблемой, когда один из потоков никогда не получит доступ в положенное время.