ОбъектУсловие
объект переменной условия
Условные переменные — это механизм, который использует глобальные переменные, общие для волокон для синхронизации. В основном он включает в себя два действия: 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
дождаться условной переменной
1Boolean Condition.wait(Integer timeout = -1);
Параметры звонка:
- timeout: целое число, указывает тайм-аут в миллисекундах. По умолчанию установлено значение -1, что означает, что тайм-аут никогда не будет истекать.
Результаты возврата:
- Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.
notify
Уведомить заблокированное волокно (последнее добавленное в пул волокон) о продолжении выполнения вниз
1Condition.notify();
notifyAll
Уведомить все заблокированные волокна, чтобы продолжить выполнение вниз
1Condition.notifyAll();
acquire
Получить право собственности на замок
1Boolean Condition.acquire(Boolean blocking = true);
Параметры звонка:
- blocking: логическое значение, указывает, ждать ли, ждать, если true, по умолчанию true
Результаты возврата:
- Boolean, возвращает информацию о том, была ли блокировка успешно получена, true указывает на успешное получение.
Метод получения используется для получения права собственности на блокировку. Когда блокировка находится в состоянии получения, этот метод немедленно возвращает значение true.
Если блокировка не может быть получена и блокировка истинна, текущее волокно переходит в режим сна. Когда другие волокна снимают блокировку, этот метод возвращает true.
Если блокировку невозможно получить и блокировка имеет значение 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