mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00

svn+ssh://pythondev@svn.python.org/python/trunk ........ r77593 | georg.brandl | 2010-01-18 00:33:53 +0100 (Mo, 18 Jan 2010) | 1 line Fix internal reference. ........ r77702 | georg.brandl | 2010-01-23 09:43:31 +0100 (Sa, 23 Jan 2010) | 1 line #7762: fix refcount annotation of PyUnicode_Tailmatch(). ........ r77703 | georg.brandl | 2010-01-23 09:47:54 +0100 (Sa, 23 Jan 2010) | 1 line #7725: fix referencing issue. ........ r77858 | georg.brandl | 2010-01-30 18:57:48 +0100 (Sa, 30 Jan 2010) | 1 line #7802: fix invalid example (heh). ........ r77887 | georg.brandl | 2010-01-31 19:51:49 +0100 (So, 31 Jan 2010) | 5 lines Fix-up ftplib documentation: move exception descriptions to toplevel, not inside a class remove attribution in "versionadded" spell and grammar check docstring of FTP_TLS ........ r78113 | georg.brandl | 2010-02-08 23:37:20 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting argument. ........ r78114 | georg.brandl | 2010-02-08 23:37:52 +0100 (Mo, 08 Feb 2010) | 1 line Fix undefined local. ........ r78115 | georg.brandl | 2010-02-08 23:40:51 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting placeholder. ........ r78117 | georg.brandl | 2010-02-08 23:48:37 +0100 (Mo, 08 Feb 2010) | 1 line Convert test failure from output-producing to self.fail(). ........ r78245 | georg.brandl | 2010-02-19 20:36:08 +0100 (Fr, 19 Feb 2010) | 1 line #7967: PyXML is no more. ........ r78385 | georg.brandl | 2010-02-23 22:33:17 +0100 (Di, 23 Feb 2010) | 1 line #8000: fix deprecated directive. What a shame to lose that glorious issue number to such a minor bug :) ........ r78386 | georg.brandl | 2010-02-23 22:48:57 +0100 (Di, 23 Feb 2010) | 1 line #6544: fix refleak in kqueue, occurring in certain error conditions. ........ r78496 | georg.brandl | 2010-02-27 15:58:08 +0100 (Sa, 27 Feb 2010) | 1 line Link to http://www.python.org/dev/workflow/ from bugs page. ........ r78760 | georg.brandl | 2010-03-07 16:23:59 +0100 (So, 07 Mär 2010) | 1 line #5341: more built-in vs builtin fixes. ........ r78771 | georg.brandl | 2010-03-07 21:58:31 +0100 (So, 07 Mär 2010) | 1 line #8085: The function is called PyObject_NewVar, not PyObject_VarNew. ........ r78772 | georg.brandl | 2010-03-07 22:12:28 +0100 (So, 07 Mär 2010) | 1 line #8039: document conditional expressions better, giving them their own section. ........ r78773 | georg.brandl | 2010-03-07 22:32:06 +0100 (So, 07 Mär 2010) | 1 line #8044: document Py_{Enter,Leave}RecursiveCall functions. ........ r78802 | georg.brandl | 2010-03-08 17:28:40 +0100 (Mo, 08 Mär 2010) | 1 line Fix typo. ........
68 lines
1.9 KiB
ReStructuredText
68 lines
1.9 KiB
ReStructuredText
|
|
:mod:`mutex` --- Mutual exclusion support
|
|
=========================================
|
|
|
|
.. module:: mutex
|
|
:synopsis: Lock and queue for mutual exclusion.
|
|
:deprecated:
|
|
|
|
.. deprecated:: 2.6
|
|
The :mod:`mutex` module has been removed in Python 3.0.
|
|
|
|
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
|
|
|
|
|
|
The :mod:`mutex` module defines a class that allows mutual-exclusion via
|
|
acquiring and releasing locks. It does not require (or imply)
|
|
:mod:`threading` or multi-tasking, though it could be useful for those
|
|
purposes.
|
|
|
|
The :mod:`mutex` module defines the following class:
|
|
|
|
|
|
.. class:: mutex()
|
|
|
|
Create a new (unlocked) mutex.
|
|
|
|
A mutex has two pieces of state --- a "locked" bit and a queue. When the mutex
|
|
is not locked, the queue is empty. Otherwise, the queue contains zero or more
|
|
``(function, argument)`` pairs representing functions (or methods) waiting to
|
|
acquire the lock. When the mutex is unlocked while the queue is not empty, the
|
|
first queue entry is removed and its ``function(argument)`` pair called,
|
|
implying it now has the lock.
|
|
|
|
Of course, no multi-threading is implied -- hence the funny interface for
|
|
:meth:`lock`, where a function is called once the lock is acquired.
|
|
|
|
|
|
.. _mutex-objects:
|
|
|
|
Mutex Objects
|
|
-------------
|
|
|
|
:class:`mutex` objects have following methods:
|
|
|
|
|
|
.. method:: mutex.test()
|
|
|
|
Check whether the mutex is locked.
|
|
|
|
|
|
.. method:: mutex.testandset()
|
|
|
|
"Atomic" test-and-set, grab the lock if it is not set, and return ``True``,
|
|
otherwise, return ``False``.
|
|
|
|
|
|
.. method:: mutex.lock(function, argument)
|
|
|
|
Execute ``function(argument)``, unless the mutex is locked. In the case it is
|
|
locked, place the function and argument on the queue. See :meth:`unlock` for
|
|
explanation of when ``function(argument)`` is executed in that case.
|
|
|
|
|
|
.. method:: mutex.unlock()
|
|
|
|
Unlock the mutex if queue is empty, otherwise execute the first element in the
|
|
queue.
|
|
|