Files
godot-docs-l10n/classes/ru/class_semaphore.rst

102 lines
5.8 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. _class_Semaphore:
Semaphore
=========
**Наследует:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Механизм синхронизации, используемый для управления доступом к общему ресурсу потоками :ref:`Thread<class_Thread>`.
.. rst-class:: classref-introduction-group
Описание
----------------
Синхронизирующий семафор, который можно использовать для синхронизации нескольких :ref:`Thread<class_Thread>`. Инициализируется нулем при создании. Для двоичной версии см. :ref:`Mutex<class_Mutex>`.
\ **Предупреждение:** Семафоры следует использовать осторожно, чтобы избежать взаимоблокировок.
\ **Предупреждение:** Чтобы гарантировать, что операционная система сможет выполнить надлежащую очистку (без сбоев, без взаимоблокировок), должны быть соблюдены следующие условия:
- Когда счетчик ссылок **Semaphore** достигает нуля и, следовательно, он уничтожается, ни один поток не должен его ожидать.
- Когда счетчик ссылок :ref:`Thread<class_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<class_Semaphore_method_post>`\ (\ count\: :ref:`int<class_int>` = 1\ ) |
+-------------------------+-----------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`try_wait<class_Semaphore_method_try_wait>`\ (\ ) |
+-------------------------+-----------------------------------------------------------------------------------+
| |void| | :ref:`wait<class_Semaphore_method_wait>`\ (\ ) |
+-------------------------+-----------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описания метода
------------------------------
.. _class_Semaphore_method_post:
.. rst-class:: classref-method
|void| **post**\ (\ count\: :ref:`int<class_int>` = 1\ ) :ref:`🔗<class_Semaphore_method_post>`
Понижает **Semaphore**, разрешая вход одному потоку или нескольким, если указано ``count``.
.. rst-class:: classref-item-separator
----
.. _class_Semaphore_method_try_wait:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **try_wait**\ (\ ) :ref:`🔗<class_Semaphore_method_try_wait>`
Подобно :ref:`wait()<class_Semaphore_method_wait>`, но не блокирует, поэтому если значение равно нулю, немедленно завершается ошибкой и возвращается ``false``. Если не равно нулю, возвращается ``true``, чтобы сообщить об успешном завершении.
.. rst-class:: classref-item-separator
----
.. _class_Semaphore_method_wait:
.. rst-class:: classref-method
|void| **wait**\ (\ ) :ref:`🔗<class_Semaphore_method_wait>`
Ожидает **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 (Нет возвращаемого значения.)`