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

Объектный семафор

Волоконный Семафор Объект

Объект семафора управляет внутренним счетчиком, который уменьшается на единицу после вызова метода receive или wait и увеличивается на единицу после вызова функции release или post. Счетчик не будет уменьшаться до отрицательного числа, потому что определите, что ожидание и обнаружение, что текущее значение равно 0, приостановит текущее волокно, пока другие волокна через расцепитель или после не увеличат значение счетчика.

Обычные случаи использования семафоров - ограничение одновременного использования ресурсов и применения моделей производителя / потребителя.

Возьмите запрос к базе данных в качестве примера, чтобы ограничить одновременное использование ресурсов:

1 2 3 4 5 6 7 8 9 10
var maxconnections = 5; var l = new coroutine.Semaphore(maxconnections); ...... l.acquire(); var conn = connectdb() ..... conn.close(); l.release();

Модель производитель / потребитель обычно использует семафоры в сочетании с очередями. Производитель добавляет данные в очередь и отправляет сигнал, а потребитель сначала ожидает сигнал, а затем получает сигнал и запрашивает данные в очереди.

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

Конструктор

Semaphore

Семафор конструктор

1
new Semaphore(Integer value = 1);

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

  • value : целое число, начальное значение счетчика

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

wait

Ожидание семафора, эквивалентного приобретению (true)

1
Semaphore.wait();

post

Освободить семафор, эквивалентный release ()

1
Semaphore.post();

trywait

Попробуйте получить сигнал, если он не может его получить, немедленно вернитесь и верните false, что эквивалентно приобретению (false)

1
Boolean Semaphore.trywait();

Вернуть результат:

  • Boolean , верно, если успешно

acquire

Взять на себя ответственность за замок

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

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

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

Вернуть результат:

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

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

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

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


release

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

1
Semaphore.release();

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


count

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

1
Integer Semaphore.count();

Вернуть результат:

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

toString

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

1
String Semaphore.toString();

Вернуть результат:

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

toJSON

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

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

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

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

Вернуть результат:

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