Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы основы ссылка класса NSCondition

Опции
Развертывание Target:

На этой странице
Язык:

NSCondition

NSCondition класс реализует условную переменную, семантика которой следуют за используемыми для условий стиля POSIX. Объект условия действует и как блокировка и как контрольная точка в данном потоке. Блокировка защищает Ваш код, в то время как это тестирует условие и выполняет задачу, инициированную условием. Поведение контрольной точки требует, чтобы условие было истиной перед доходами потока с его задачей. В то время как условие не является истиной, блоками потока. Это остается блокированным, пока другой поток не сигнализирует объект условия.

Семантика для использования NSCondition объект следующие:

  1. Заблокируйте объект условия.

  2. Протестируйте булев предикат. (Этот предикат является булевым флагом или другой переменной в Вашем коде, указывающем, безопасно ли выполнить задачу, защищенную условием.)

  3. Если булев предикат является ложью, вызовите объект условия wait или waitUntilDate: метод для блокирования потока. После возврата из этих методов перейдите к шагу 2, чтобы повторно протестировать Ваш булев предикат. (Продолжайте ожидать и повторно тестировать предикат, пока это не будет истина.)

  4. Если булев предикат является истиной, выполните задачу.

  5. Дополнительно обновите любые предикаты (или сигнализируйте любые условия), затронутый Вашей задачей.

  6. Когда Ваша задача будет сделана, разблокируйте объект условия.

Псевдокод для выполнения предыдущих шагов поэтому посмотрел бы что-то как следующее:

  • lock the condition
  • while (!(boolean_predicate)) {
  • wait on condition
  • }
  • do protected work
  • (optionally, signal or broadcast the condition again or change a predicate value)
  • unlock the condition

Каждый раз, когда Вы используете объект условия, первый шаг должен заблокировать условие. Блокировка условия гарантирует, что Ваш предикат и код задачи защищены от интерференции другими потоками с помощью того же условия. Как только Вы выполнили свою задачу, можно установить другие предикаты или сигнализировать другие условия на основе потребностей кода. Необходимо всегда устанавливать предикаты и сигнальные условия при содержании блокировки объекта условия.

Когда поток ожидает на условии, объект условия разблокировал свою блокировку и блокирует поток. Когда условие сообщено, система будит поток. Объект условия тогда повторно получает свою блокировку прежде, чем возвратиться из wait или waitUntilDate: метод. Таким образом, с точки зрения потока, это - как будто это всегда содержало блокировку.

Булев предикат является важной частью семантики использования условий из-за способа, которым работает сигнализация. Сигнализация условия не гарантирует, что само условие является истиной. Там синхронизируют проблемы, вовлеченные в сигнализацию, которая может заставить ложные сигналы появляться. Используя предикат гарантирует, чтобы эти ложные сигналы не заставляли Вас выполнять работу, прежде чем будет безопасно сделать так. Сам предикат является просто флагом или другой переменной в Вашем коде, который Вы тестируете для получения булева результата.

Для получения дополнительной информации о том, как использовать условия, посмотрите Используя Поток POSIX, Привязывает Руководство по программированию Поточной обработки.

Наследование


Соответствует


Оператор импорта


Swift

import Foundation

Objective C

@import Foundation;

Доступность


Доступный в OS X v10.5 и позже.
  • Блокирует текущий поток, пока не сообщено условие.

    Объявление

    Swift

    func wait()

    Objective C

    - (void)wait

    Обсуждение

    Необходимо заблокировать получатель до вызова этого метода.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.5 и позже.

    См. также

    – lock (NSLocking)

  • Блокирует текущий поток, пока условие не сообщено, или предел требуемого времени достигнут.

    Объявление

    Swift

    func waitUntilDate(_ limit: NSDate) -> Bool

    Objective C

    - (BOOL)waitUntilDate:(NSDate *)limit

    Параметры

    limit

    Время, в которое можно разбудить поток, если не было сообщено условие.

    Возвращаемое значение

    YEStrue если было сообщено условие; иначе, NOfalse если было достигнуто ограничение по времени.

    Обсуждение

    Необходимо заблокировать получатель до вызова этого метода.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.5 и позже.

    См. также

    – lock (NSLocking)

  • Сигнализирует условие, будя один поток, ожидающий на нем.

    Объявление

    Swift

    func signal()

    Objective C

    - (void)signal

    Обсуждение

    Вы используете этот метод для пробуждения одного потока, ожидающего на условии. Можно вызвать этот метод многократно для пробуждения многократных потоков. Если никакие потоки не ожидают на условии, этот метод ничего не делает.

    Для предотвращения условий состязания необходимо вызвать этот метод только, в то время как заблокирован получатель.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.5 и позже.

  • Сигнализирует условие, будя все потоки, ожидающие на нем.

    Объявление

    Swift

    func broadcast()

    Objective C

    - (void)broadcast

    Обсуждение

    Если никакие потоки не ожидают на условии, этот метод ничего не делает.

    Для предотвращения условий состязания необходимо вызвать этот метод только, в то время как заблокирован получатель.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.5 и позже.

  • имя имя Свойство

    Имя условия.

    Объявление

    Swift

    var name: String?

    Objective C

    @property(copy) NSString *name

    Обсуждение

    Можно использовать строку имени для идентификации объекта условия в коде. Какао также использует это имя в качестве части любых описаний ошибок, включающих условие.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.5 и позже.