Files
godot-docs-l10n/classes/uk/class_mutex.rst

112 lines
6.4 KiB
ReStructuredText
Raw 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_Mutex:
Mutex
=====
**Успадковує:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Для синхронізації кількох :ref:`Thread<class_Thread>`\ s.
.. rst-class:: classref-introduction-group
Опис
--------
Синхронізація слизових (мутуальна відчуження). Це використовується для синхронізації декількох :ref:`Thread<class_Thread>`\ s, і еквівалентний бінарним :ref:`Semaphore<class_Semaphore>`. Це гарантує, що тільки одна нитка може отримати доступ до критичного розділу одночасно.
Це реактивний мусекс, що означає, що він може заблокувати кілька разів на одну нитку, за умови, що вона також розблокує її стільки разів.
\ ** Попередження:** Мутекси повинні бути використані ретельно, щоб уникнути відмерлень.
\ ** Попередження:** Для забезпечення належного очищення без аварійних відкладень або відхилень необхідно виконати наступні умови:
- Коли кількість посилань **Mutex** досягає нуля, і тому вона знищена, немає ниток (в тому числі одного, на якому буде відбуватися руйнування) повинні бути зафіксовані.
- Коли кількість посилань :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:`lock<class_Mutex_method_lock>`\ (\ ) |
+-------------------------+----------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`try_lock<class_Mutex_method_try_lock>`\ (\ ) |
+-------------------------+----------------------------------------------------+
| |void| | :ref:`unlock<class_Mutex_method_unlock>`\ (\ ) |
+-------------------------+----------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описи методів
--------------------------
.. _class_Mutex_method_lock:
.. rst-class:: classref-method
|void| **lock**\ (\ ) :ref:`🔗<class_Mutex_method_lock>`
Locks this **Mutex**, блоки до тих пір, поки він не розблокував поточний власник.
\ **Примітка:** Ця функція повертається без блокування, якщо нитка вже має право власності на грязь.
.. rst-class:: classref-item-separator
----
.. _class_Mutex_method_try_lock:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **try_lock**\ (\ ) :ref:`🔗<class_Mutex_method_try_lock>`
Перемикаючи це **Mutex**, але не блокує. ``true`` на успіх, ``false`` інакше.
\ **Примітка:** Ця функція повертає ``true``, якщо нитка вже має право власності на мутекс.
.. rst-class:: classref-item-separator
----
.. _class_Mutex_method_unlock:
.. rst-class:: classref-method
|void| **unlock**\ (\ ) :ref:`🔗<class_Mutex_method_unlock>`
Розблокування цього **Mutex**, залишивши його на інші нитки.
\ **Примітка:** Якщо нитка називається :ref:`lock()<class_Mutex_method_lock>` або :ref:`try_lock()<class_Mutex_method_try_lock>` кілька разів, коли вже володіючи грою, вона також повинна викликати :ref:`розблокування()<class_Mutex_method_розблокування>` однакову кількість разів, щоб розблокувати її правильно.
\ **Попередження:** Викликайте :ref:`unlock()<class_Mutex_method_unlock>` більше разів, що :ref:`lock()<class_Mutex_method_lock>` на даній нитки, таким чином, закінчуючи спробами розблокувати нерозблокований мукс, неправильно і може викликати аварійні ситуації або зблокування.
.. |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 (Значення не повертається.)`