Документация Python неофициальный перевод
Содержание страницы

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()

Разблокирует мьютекс, если очередь пуста, иначе выполняет первый элемент в очереди.