Встроенный объект объекта

ОбъектУсловие

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

Условные переменные — это механизм, который использует глобальные переменные, общие для волокон для синхронизации. В основном он включает в себя два действия: 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

отношения наследства

Конструктор

Condition

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

1
new Condition();

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

1
new Condition(Lock lock);

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

  • lock:Lock, используя самодельные замки

функция-член

wait

дождаться условной переменной

1
Boolean Condition.wait(Integer timeout = -1);

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

  • timeout: целое число, указывает тайм-аут в миллисекундах. По умолчанию установлено значение -1, что означает, что тайм-аут никогда не будет истекать.

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

  • Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.

notify

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

1
Condition.notify();

notifyAll

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

1
Condition.notifyAll();

acquire

Получить право собственности на замок

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

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

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

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

  • Boolean, возвращает информацию о том, была ли блокировка успешно получена, true указывает на успешное получение.

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

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

Если блокировку невозможно получить и блокировка имеет значение 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