Подтвердить что ты не робот

Разрешены ли вложенные синхронизированные блоки в Objective-C?

Я прочитал в этой статье, что в Java разрешены вложенные синхронизированные блоки. Я знаю, что синхронизированные блоки Objective-C очень похожи на Java. Поэтому я задаюсь вопросом: разрешены ли вложенные блоки в Objective-C?

У меня также есть побочный вопрос: существует ли практический предел для рекурсивных блоков?

Спасибо за быстрый ответ!

4b9b3361

Ответ 1

Да. Из документов (сейчас на пенсии):

Функция синхронизации Objective-C поддерживает рекурсивный и реентерабельный код. Поток может использовать один семафор несколько раз рекурсивным способом; другие потоки не могут использовать его до тех пор, пока поток не снимет все блокировки, полученные с его помощью; то есть каждый блок @synchronized() завершается нормально или через исключение.

Для обсуждения производительности с этим и другими методами синхронизации/блокировки, смотрите здесь.