Spec-Zone.ru › GCC 11

Следующая: Быстрое перечисление, Предыдущая: Исключения, Вверх: Возможности GNU Objective-C [Содержание][Индекс]

8.8 Синхронизация ¶

GNU Objective-C предоставляет поддержку синхронизированных блоков:

@synchronized (ObjCClass *guard) {
  …
}

При входе в @synchronized блок, поток выполнения сначала проверяет, не был ли соответствующий guard объект заблокирован другим потоком. Если был, текущий поток ожидает, пока другой поток не освободит блокировку. Как только guard станет доступным, текущий поток установит свою блокировку на него, выполнит код, содержащийся в @synchronized блоке, и, наконец, освободит блокировку (тем самым сделав guard доступным для других потоков).

В отличие от Java, Objective-C не позволяет пометить целые методы как @synchronized. Обратите внимание, что выбрасывание исключений из @synchronized блоков разрешено и приведет к правильному разблокированию защищаемого объекта.

Из-за взаимодействия между синхронизацией и обработкой исключений, вы можете использовать @synchronized только при компиляции с включенными исключениями, то есть с опцией командной строки -fobjc-exceptions.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Synchronization.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API