Объект встроенный объект

Состояние объекта

Объект переменной условия

Переменные условия - это механизм, который использует глобальные переменные, совместно используемые между волокнами для синхронизации. Он в основном включает в себя два действия: 1) поток ожидает установления определенного условия и приостанавливает себя; 2) другой поток устанавливает условие и уведомляет ожидающее волокно для выполнения вниз.

Чтобы предотвратить конкуренцию, каждой переменной условия требуется одинLockСоответствие (LockМожет быть явно создан и передан вами самостоятельно или может быть создан для вас с помощью fibjs)

Используя условные переменные, можно использовать одну условную переменную для управления переключением партии волокон;

Ниже приведены два примера планирования волокна:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var coroutine = require("coroutine"); var cond = new coroutine.Condition(); var ready = false; var state = "ready"; function funcwait() { cond.acquire(); while (!ready) cond.wait(); state = "go" cond.release(); } coroutine.start(funcwait); cond.acquire(); console.log(state) ready = true; cond.notify(); coroutine.sleep(); console.log(state);

выведет:

1 2
ready go

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

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Condition|new Condition()|wait();notify();notifyAll()] [object] <:- [Lock] [Lock] <:- [Condition] Lock new Lock() acquire() release() count() Condition new Condition() wait() notify() notifyAll() object toString() toJSON()

Конструктор

Condition

Конструктор условной переменной (блокировка, требуемая условной переменной, создается внутри fibjs)

1
new Condition();

Конструктор условной переменной

1
new Condition(Lock lock);

Параметры звонка:

  • lock: Lock, Используйте самодельный замок

Функция члена

wait

Перевести волокно в состояние блокировки

1
Condition.wait();

notify

Уведомить заблокированное волокно (то, которое было добавлено в пул волокон последним), чтобы продолжить его выполнение в нисходящем направлении.

1
Condition.notify();

notifyAll

Уведомить все заблокированные волокна, чтобы продолжить движение вниз

1
Condition.notifyAll();

acquire

Приобрести право собственности на замок

1
Boolean Condition.acquire(Boolean blocking = true);

Параметры звонка:

  • blocking: Boolean, указать, ждать ли, если правда, ждать, по умолчанию истинно

Результат возврата:

  • Boolean, Возвращает, получена ли блокировка успешно, истина означает, что получение выполнено успешно.

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

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

Когда блокировка недоступна и блокировка имеет значение false, метод возвращает false.


release

Освободить право владения блокировкой

1
Condition.release();

Этот метод освобождает владение блокировкой. Если текущее волокно не владеет блокировкой, этот метод выдаст ошибку.


count

Запросить количество ожидающих в настоящее время задач

1
Integer Condition.count();

Результат возврата:

  • Integer, Возвращает количество задач

toString

Возвращает строковое представление объекта, обычно возвращает «[Native Object]», объект может быть повторно реализован в соответствии с его собственными характеристиками.

1
String Condition.toString();

Результат возврата:

  • String, Возвращает строковое представление объекта

toJSON

Возвращает представление объекта в формате JSON, обычно возвращает набор читаемых атрибутов, определенных объектом.

1
Value Condition.toJSON(String key = "");

Параметры звонка:

  • key: Строка, не используется

Результат возврата:

  • Value, Возвращает значение, содержащее сериализуемый JSON