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

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

Объект семафора волокна

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

дождись семафора

1
Boolean Semaphore.wait(Integer timeout = -1);

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

  • timeout: целое число, указывает тайм-аут в миллисекундах. По умолчанию установлено значение -1, что означает, что тайм-аут никогда не будет истекать.

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

  • Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.

post

Освободите семафор, что эквивалентно Release().

1
Semaphore.post();

trywait

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

1
Boolean Semaphore.trywait();

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

  • Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.

acquire

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

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

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

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

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

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

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

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

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