Содержание страницы
8.9. mutex – Поддержка взаимного исключения¶mutex – Mutual exclusion support
Устарело с версии 2.6: Модуль mutex удалён в Python 3.
Модуль mutex определяет класс, который обеспечивает взаимное исключение через
захват и освобождение блокировок. Он не требует (и не подразумевает)
threading или многозадачности, хотя может быть полезен для этих
целей.
Модуль mutex определяет следующий класс:
-
class
mutex.mutex¶ Создаёт новый (разблокированный) мьютекс.
Мьютекс имеет две части состояния – бит «заблокировано» и очередь. Когда мьютекс не заблокирован, очередь пуста. В противном случае очередь содержит ноль или более пар
(function, argument), представляющих функции (или методы), ожидающие захвата блокировки. Когда мьютекс разблокируется, пока очередь не пуста, первый элемент очереди удаляется и вызывается его параfunction(argument), что означает, что теперь он владеет блокировкой.Разумеется, многопоточность не подразумевается – отсюда забавный интерфейс для
lock(), где функция вызывается после захвата блокировки.
8.9.1. Объекты мьютекса¶Mutex Objects
Объекты mutex имеют следующие методы:
-
mutex.test()¶ Проверяет, заблокирован ли мьютекс.
-
mutex.testandset()¶ «Атомарная» проверка-и-установка: захватывает блокировку, если она не установлена, и возвращает
True, в противном случае возвращаетFalse.
-
mutex.lock(function, argument)¶ Выполняет
function(argument), если мьютекс не заблокирован. Если он заблокирован, помещает функцию и аргумент в очередь. См.unlock()для объяснения, когда в этом случае выполняетсяfunction(argument).
-
mutex.unlock()¶ Разблокирует мьютекс, если очередь пуста, иначе выполняет первый элемент в очереди.