Состояние объекта
Объект переменной условия
Переменные условия - это механизм, который использует глобальные переменные, совместно используемые между волокнами для синхронизации. Он в основном включает в себя два действия: 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
21var 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
2ready
go
Наследование
Конструктор
Condition
Конструктор условной переменной (блокировка, требуемая условной переменной, создается внутри fibjs)
1new Condition();
Конструктор условной переменной
1new Condition(Lock lock);
Параметры звонка:
- lock: Lock, Используйте самодельный замок
Функция члена
wait
Перевести волокно в состояние блокировки
1Condition.wait();
notify
Уведомить заблокированное волокно (то, которое было добавлено в пул волокон последним), чтобы продолжить его выполнение в нисходящем направлении.
1Condition.notify();
notifyAll
Уведомить все заблокированные волокна, чтобы продолжить движение вниз
1Condition.notifyAll();
acquire
Приобрести право собственности на замок
1Boolean Condition.acquire(Boolean blocking = true);
Параметры звонка:
- blocking: Boolean, указать, ждать ли, если правда, ждать, по умолчанию истинно
Результат возврата:
- Boolean, Возвращает, получена ли блокировка успешно, истина означает, что получение выполнено успешно.
Метод получения используется для получения права владения блокировкой.Когда блокировка находится в доступном состоянии, этот метод немедленно возвращает истину.
Когда блокировка недоступна и блокировка истинна, текущее волокно переходит в спящий режим.Когда другие волокна освобождают блокировку, этот метод возвращает истину.
Когда блокировка недоступна и блокировка имеет значение false, метод возвращает false.
release
Освободить право владения блокировкой
1Condition.release();
Этот метод освобождает владение блокировкой. Если текущее волокно не владеет блокировкой, этот метод выдаст ошибку.
count
Запросить количество ожидающих в настоящее время задач
1Integer Condition.count();
Результат возврата:
- Integer, Возвращает количество задач
toString
Возвращает строковое представление объекта, обычно возвращает «[Native Object]», объект может быть повторно реализован в соответствии с его собственными характеристиками.
1String Condition.toString();
Результат возврата:
- String, Возвращает строковое представление объекта
toJSON
Возвращает представление объекта в формате JSON, обычно возвращает набор читаемых атрибутов, определенных объектом.
1Value Condition.toJSON(String key = "");
Параметры звонка:
- key: Строка, не используется
Результат возврата:
- Value, Возвращает значение, содержащее сериализуемый JSON