<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <link rel="STYLESHEET" href="lib.css" type='text/css' /> <link rel="SHORTCUT ICON" href="../icons/pyfav.gif" /> <link rel='start' href='../index.html' title='Python Documentation Index' /> <link rel="first" href="lib.html" title='Python Library Reference' /> <link rel='contents' href='contents.html' title="Contents" /> <link rel='index' href='genindex.html' title='Index' /> <link rel='last' href='about.html' title='About this document...' /> <link rel='help' href='about.html' title='About this document...' /> <LINK rel="next" href="rlock-objects.html"> <LINK rel="prev" href="module-threading.html"> <LINK rel="parent" href="module-threading.html"> <LINK rel="next" href="rlock-objects.html"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name='aesop' content='information' /> <META name="description" content="Lock Objects "> <META name="keywords" content="lib"> <META name="resource-type" content="document"> <META name="distribution" content="global"> <title>7.5.1 Lock Objects </title> </head> <body> <DIV CLASS="navigation"> <div id='top-navigation-panel'> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="7.5 threading " href="module-threading.html"><img src='../icons/previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="7.5 threading " href="module-threading.html"><img src='../icons/up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="7.5.2 RLock Objects" href="rlock-objects.html"><img src='../icons/next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Python Library Reference</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" href="contents.html"><img src='../icons/contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png' border='0' height='32' alt='Module Index' width='32' /></a></td> <td class='online-navigation'><a rel="index" title="Index" href="genindex.html"><img src='../icons/index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="module-threading.html">7.5 threading </A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="module-threading.html">7.5 threading </A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="rlock-objects.html">7.5.2 RLock Objects</A> </div> <hr /></div> </DIV> <!--End of Navigation Panel--> <H2><A NAME="SECTION009510000000000000000"><!--x--></A><A NAME="lock-objects"><!--z--></A> <BR> 7.5.1 Lock Objects </H2> <P> A primitive lock is a synchronization primitive that is not owned by a particular thread when locked. In Python, it is currently the lowest level synchronization primitive available, implemented directly by the <tt class="module"><a href="module-thread.html">thread</a></tt> extension module. <P> A primitive lock is in one of two states, ``locked'' or ``unlocked''. It is created in the unlocked state. It has two basic methods, <tt class="method">acquire()</tt> and <tt class="method">release()</tt>. When the state is unlocked, <tt class="method">acquire()</tt> changes the state to locked and returns immediately. When the state is locked, <tt class="method">acquire()</tt> blocks until a call to <tt class="method">release()</tt> in another thread changes it to unlocked, then the <tt class="method">acquire()</tt> call resets it to locked and returns. The <tt class="method">release()</tt> method should only be called in the locked state; it changes the state to unlocked and returns immediately. When more than one thread is blocked in <tt class="method">acquire()</tt> waiting for the state to turn to unlocked, only one thread proceeds when a <tt class="method">release()</tt> call resets the state to unlocked; which one of the waiting threads proceeds is not defined, and may vary across implementations. <P> All methods are executed atomically. <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-2524' class="method">acquire</tt></b>(</nobr></td> <td><big>[</big><var>blocking<code> = 1</code></var><big>]</big>)</td></tr></table></dt> <dd> Acquire a lock, blocking or non-blocking. <P> When invoked without arguments, block until the lock is unlocked, then set it to locked, and return. There is no return value in this case. <P> When invoked with the <var>blocking</var> argument set to true, do the same thing as when called without arguments, and return true. <P> When invoked with the <var>blocking</var> argument set to false, do not block. If a call without an argument would block, return false immediately; otherwise, do the same thing as when called without arguments, and return true. </dl> <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-2525' class="method">release</tt></b>(</nobr></td> <td>)</td></tr></table></dt> <dd> Release a lock. <P> When the lock is locked, reset it to unlocked, and return. If any other threads are blocked waiting for the lock to become unlocked, allow exactly one of them to proceed. <P> Do not call this method when the lock is unlocked. <P> There is no return value. </dl> <P> <DIV CLASS="navigation"> <div class='online-navigation'><hr /> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="7.5 threading " rel="prev" title="7.5 threading " href="module-threading.html"><img src='../icons/previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="7.5 threading " rel="parent" title="7.5 threading " href="module-threading.html"><img src='../icons/up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="7.5.2 RLock Objects" rel="next" title="7.5.2 RLock Objects" href="rlock-objects.html"><img src='../icons/next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Python Library Reference</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" rel="contents" title="Table of Contents" href="contents.html"><img src='../icons/contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png' border='0' height='32' alt='Module Index' width='32' /></a></td> <td class='online-navigation'><a rel="index" title="Index" rel="index" title="Index" href="genindex.html"><img src='../icons/index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="module-threading.html">7.5 threading </A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="module-threading.html">7.5 threading </A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="rlock-objects.html">7.5.2 RLock Objects</A> </div> </div> <hr /> <span class="release-info">Release 2.3.4, documentation updated on May 20, 2004.</span> </DIV> <!--End of Navigation Panel--> <ADDRESS> See <i><a href="about.html">About this document...</a></i> for information on suggesting changes. </ADDRESS> </BODY> </HTML>