ОбъектСемафор
Объект семафора волокна
Объект-семафор управляет внутренним счетчиком, который уменьшается на единицу после вызова получения или ожидания и увеличивается на единицу после вызова выпуска или публикации. Счетчик не уменьшится до отрицательного числа, потому что, когда получение и ожидание обнаружат, что значение равно 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
дождись семафора
1Boolean Semaphore.wait(Integer timeout = -1);
Параметры звонка:
- timeout: целое число, указывает тайм-аут в миллисекундах. По умолчанию установлено значение -1, что означает, что тайм-аут никогда не будет истекать.
Результаты возврата:
- Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.
post
Освободите семафор, что эквивалентно Release().
1Semaphore.post();
trywait
Попытайтесь получить сигнал. Если его невозможно получить, он немедленно вернется и вернет false, что эквивалентно получению (false)
1Boolean Semaphore.trywait();
Результаты возврата:
- Boolean, возвращает true, если приобретение прошло успешно, возвращает false, если время ожидания истекло.
acquire
Получить право собственности на замок
1Boolean Semaphore.acquire(Boolean blocking = true);
Параметры звонка:
- blocking: логическое значение, указывает, ждать ли, ждать, если true, по умолчанию true
Результаты возврата:
- Boolean, возвращает информацию о том, была ли блокировка успешно получена, true указывает на успешное получение.
Метод получения используется для получения права собственности на блокировку. Когда блокировка находится в состоянии получения, этот метод немедленно возвращает значение true.
Если блокировка не может быть получена и блокировка истинна, текущее волокно переходит в режим сна. Когда другие волокна снимают блокировку, этот метод возвращает true.
Если блокировку невозможно получить и блокировка имеет значение 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