Spec-Zone.ru › GCC 10

Следующее: Быстрое перечисление, Предыдущее: Исключения, Наверх: Особенности 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-10.5.0/gcc/Synchronization.html

Spec-Zone.ru

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