Spec-Zone.ru › GCC 9

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-12.2.0/gcc/Synchronization.html

Spec-Zone.ru

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