Spec-Zone.ru › GCC 15

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

Spec-Zone.ru

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