Семафор объекта
Волоконно-семафорный объект
Объект семафора управляет внутренним счетчиком, который уменьшается на единицу после вызова запроса или ожидания и увеличивается на единицу после вызова release или post. Счетчик не будет уменьшаться до отрицательного числа, потому что получение и ожидание будут переводить текущее волокно в спящий режим, когда они обнаружат, что значение равно 0, до тех пор, пока другие волокна не увеличат значение счетчика посредством сброса или поста.
Обычно семафоры используются для ограничения одновременного использования ресурсов и применения модели производитель / потребитель.
В качестве примера возьмем запросы к базе данных, чтобы ограничить одновременное использование ресурсов:
1
2
3
4
5
6
7
8
9
10var maxconnections = 5;
var l = new coroutine.Semaphore(maxconnections);
......
l.acquire();
var conn = connectdb()
.....
conn.close();
l.release();
Модель производитель / потребитель обычно использует семафоры вместе с очередями. Производитель добавляет данные в очередь и отправляет сигнал, а потребитель сначала ожидает сигнала, получает сигнал, а затем переходит в очередь, чтобы запросить и получить данные.
Наследование
Конструктор
Semaphore
Конструктор семафоров
1new Semaphore(Integer value = 1);
Параметры звонка:
- value: Целое число, начальное значение счетчика.
Функция члена
wait
Ожидание семафора, эквивалентного получению (истина)
1Semaphore.wait();
post
Освободить семафор, что эквивалентно release ()
1Semaphore.post();
trywait
Попробуйте получить сигнал, если он не может быть получен, немедленно верните и верните false, что эквивалентно получению (false)
1Boolean Semaphore.trywait();
Результат возврата:
- Boolean, Верните истину, если получение успешно
acquire
Приобрести право собственности на замок
1Boolean Semaphore.acquire(Boolean blocking = true);
Параметры звонка:
- blocking: Boolean, указать, ждать ли, если правда, ждать, по умолчанию истинно
Результат возврата:
- Boolean, Возвращает, получена ли блокировка успешно, истина означает, что получение выполнено успешно.
Метод получения используется для получения права владения блокировкой.Когда блокировка находится в доступном состоянии, этот метод немедленно возвращает истину.
Когда блокировка недоступна и блокировка истинна, текущее волокно переходит в спящий режим.Когда другие волокна освобождают блокировку, этот метод возвращает истину.
Когда блокировка недоступна и блокировка имеет значение false, метод возвращает false.
release
Освободить право владения блокировкой
1Semaphore.release();
Этот метод освобождает владение блокировкой. Если текущее волокно не владеет блокировкой, этот метод выдаст ошибку.
count
Запросить количество ожидающих в настоящее время задач
1Integer Semaphore.count();
Результат возврата:
- Integer, Возвращает количество задач
toString
Возвращает строковое представление объекта, обычно возвращает «[Native Object]», объект может быть повторно реализован в соответствии с его собственными характеристиками.
1String Semaphore.toString();
Результат возврата:
- String, Возвращает строковое представление объекта
toJSON
Возвращает представление объекта в формате JSON, обычно возвращает набор читаемых атрибутов, определенных объектом.
1Value Semaphore.toJSON(String key = "");
Параметры звонка:
- key: Строка, не используется
Результат возврата:
- Value, Возвращает значение, содержащее сериализуемый JSON