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

Блокировка объекта

Блокировка — это встроенный объект, который можно использовать для управления одновременным доступом к волокнам. Вы можете получить блокировку через одно волокно, чтобы предотвратить одновременное получение его другими волокнами. Замок может пройтиcoroutine.Lock() создание функции

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

Ниже приведен простой пример использования Lock для реализации поочередного выполнения двух волокон, а значение общей переменной v не равно 300.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
var coroutine = require("coroutine") var l = new coroutine.Lock() var v = 100 function f() { l.acquire() v = 200 coroutine.sleep(1) v = 300 l.release() } coroutine.start(f) coroutine.sleep(1) l.acquire() assert.notEqual(300, v) assert.equal(200, v) l.release()

Сначала создается объект Lock, входит в волокно f, получает блокировку, изменяет переменную v, а затем снимает блокировку. В основном потоке дождитесь завершения волокна f... Когда волокно f освобождает блокировку, основной поток начинает получать блокировку и гарантирует, что значение переменной v изменится на 300.

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

%0 object object toString() toJSON() Lock Lock new Lock() acquire() release() count() object->Lock Condition Condition Lock->Condition Event Event Lock->Event Semaphore Semaphore Lock->Semaphore

Конструктор

Lock

Конструктор

1
new Lock();

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

acquire

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

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

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

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

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

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

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

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

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


release

Освободить право собственности на замок

1
Lock.release();

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


count

Запрос текущего количества ожидающих задач

1
Integer Lock.count();

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

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

toString

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

1
String Lock.toString();

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

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

toJSON

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

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

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

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

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

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