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

Семафор объекта

Волоконно-семафорный объект

Объект семафора управляет внутренним счетчиком, который уменьшается на единицу после вызова запроса или ожидания и увеличивается на единицу после вызова 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();

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

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

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

Конструктор

Semaphore

Конструктор семафоров

1
new Semaphore(Integer value = 1);

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

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

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

wait

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

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

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

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

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

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

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


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