:github_url: hide .. _class_Semaphore: Semaphore ========= **Успадковує:** :ref:`RefCounted` **<** :ref:`Object` Механізм синхронізації, що використовується для управління доступом до спільного ресурсу :ref:`Thread`\ s. .. rst-class:: classref-introduction-group Опис -------- Синхронізація semaphore, які можна використовувати для синхронізації декількох :ref:`Thread`\ s. Спочатку до нуль на створення. Для бінарної версії див. :ref:`Mutex`. \ **Навігація:** Семафори повинні бути використані ретельно, щоб уникнути відключення. \ **Попередня:** Щоб гарантувати, що операційна система здатна виконати належне очищення (без аварійних ситуацій, не відмерллок), ці умови повинні відповідати: - Коли довідка **Semaphore** досягає нуля, і тому знищується, не потрібно чекати на неї. - Коли кількість посилань :ref:`Thread` досягає нуля, і тому вона знищена, не варто чекати на будь-який сеймофор. .. rst-class:: classref-introduction-group Посібники ------------------ - :doc:`Використання кількох потоків <../tutorials/performance/using_multiple_threads>` - :doc:`Нитка-безпечні API <../tutorials/performance/thread_safe_apis>` .. rst-class:: classref-reftable-group Методи ------------ .. table:: :widths: auto +-------------------------+-----------------------------------------------------------------------------------+ | |void| | :ref:`post`\ (\ count\: :ref:`int` = 1\ ) | +-------------------------+-----------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`try_wait`\ (\ ) | +-------------------------+-----------------------------------------------------------------------------------+ | |void| | :ref:`wait`\ (\ ) | +-------------------------+-----------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи методів -------------------------- .. _class_Semaphore_method_post: .. rst-class:: classref-method |void| **post**\ (\ count\: :ref:`int` = 1\ ) :ref:`🔗` Знижує **Semaphore**, дозволяючи один потік або більше, якщо вказано ``count``. .. rst-class:: classref-item-separator ---- .. _class_Semaphore_method_try_wait: .. rst-class:: classref-method :ref:`bool` **try_wait**\ (\ ) :ref:`🔗` Як :ref:`wait()`, але не буде блокувати, тому якщо значення нульова, не відразу і повертається ``false``. ``true`` to report success. .. rst-class:: classref-item-separator ---- .. _class_Semaphore_method_wait: .. rst-class:: classref-method |void| **wait**\ (\ ) :ref:`🔗` Очікується на **Semaphore**, якщо його значення є нульовим, блокує до незеро. .. |virtual| replace:: :abbr:`virtual (Зазвичай, цей метод перевизначається користувачем, щоб він мав вплив.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Цей метод не має побічних ефектів. Не змінює ніяку змінну екземпляра об'єкта.)` .. |vararg| replace:: :abbr:`vararg (Цей метод приймає будь-яке число аргументів після описаних тут.)` .. |constructor| replace:: :abbr:`constructor (Цей метод використовується для побудови типів.)` .. |static| replace:: :abbr:`static (Цей метод не потребує екземпляра для виклику, його можна викликати безпосередньо за допомогою назви класу.)` .. |operator| replace:: :abbr:`operator (Цей метод описує дійсний оператор для взаємодії з цим типом як з лівим операндом.)` .. |bitfield| replace:: :abbr:`BitField (Це значення є цілим числом, складеним у вигляді бітової маски з наступних прапорів.)` .. |void| replace:: :abbr:`void (Значення не повертається.)`