📄 semaphore-objects.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>7.5.4 Semaphore Objects </title>
<META NAME="description" CONTENT="7.5.4 Semaphore Objects ">
<META NAME="keywords" CONTENT="lib">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="STYLESHEET" href="lib.css" tppabs="http://www.python.org/doc/current/lib/lib.css">
<LINK REL="next" href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html">
<LINK REL="previous" href="condition-objects.html" tppabs="http://www.python.org/doc/current/lib/condition-objects.html">
<LINK REL="up" href="module-threading.html" tppabs="http://www.python.org/doc/current/lib/module-threading.html">
<LINK REL="next" href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html">
</head>
<body>
<DIV CLASS="navigation"><table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A href="condition-objects.html" tppabs="http://www.python.org/doc/current/lib/condition-objects.html"><img src="previous.gif" tppabs="http://www.python.org/doc/current/icons/previous.gif" border="0" height="32"
alt="Previous Page" width="32"></A></td>
<td><A href="module-threading.html" tppabs="http://www.python.org/doc/current/lib/module-threading.html"><img src="up.gif" tppabs="http://www.python.org/doc/current/icons/up.gif" border="0" height="32"
alt="Up One Level" width="32"></A></td>
<td><A href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html"><img src="next.gif" tppabs="http://www.python.org/doc/current/icons/next.gif" border="0" height="32"
alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Python Library Reference</td>
<td><A href="contents.html" tppabs="http://www.python.org/doc/current/lib/contents.html"><img src="contents.gif" tppabs="http://www.python.org/doc/current/icons/contents.gif" border="0" height="32"
alt="Contents" width="32"></A></td>
<td><a href="modindex.html" tppabs="http://www.python.org/doc/current/lib/modindex.html" title="Module Index"><img src="modules.gif" tppabs="http://www.python.org/doc/current/icons/modules.gif" border="0" height="32"
alt="Module Index" width="32"></a></td>
<td><A href="genindex.html" tppabs="http://www.python.org/doc/current/lib/genindex.html"><img src="index.gif" tppabs="http://www.python.org/doc/current/icons/index.gif" border="0" height="32"
alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" href="condition-objects.html" tppabs="http://www.python.org/doc/current/lib/condition-objects.html">7.5.3 Condition Objects</A>
<b class="navlabel">Up:</b> <a class="sectref" href="module-threading.html" tppabs="http://www.python.org/doc/current/lib/module-threading.html">7.5 threading </A>
<b class="navlabel">Next:</b> <a class="sectref" href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html">7.5.5 Event Objects</A>
<br><hr></DIV>
<!--End of Navigation Panel-->
<H2>
<BR>
7.5.4 Semaphore Objects
</H2>
<P>
This is one of the oldest synchronization primitives in the history of
computer science, invented by the early Dutch computer scientist
Edsger W. Dijkstra (he used <tt class="method">P()</tt> and <tt class="method">V()</tt> instead of
<tt class="method">acquire()</tt> and <tt class="method">release()</tt>).
<P>
A semaphore manages an internal counter which is decremented by each
<tt class="method">acquire()</tt> call and incremented by each <tt class="method">release()</tt>
call. The counter can never go below zero; when <tt class="method">acquire()</tt>
finds that it is zero, it blocks, waiting until some other thread
calls <tt class="method">release()</tt>.
<P>
<dl><dt><b><a name='l2h-1653'><tt class='class'>Semaphore</tt></a></b> (<big>[</big><var>value</var><big>]</big>)
<dd>
The optional argument gives the initial value for the internal
counter; it defaults to <code>1</code>.
</dl>
<P>
<dl><dt><b><a name='l2h-1654'><tt class='method'>acquire</tt></a></b> (<big>[</big><var>blocking</var><big>]</big>)
<dd>
Acquire a semaphore.
<P>
When invoked without arguments: if the internal counter is larger than
zero on entry, decrement it by one and return immediately. If it is
zero on entry, block, waiting until some other thread has called
<tt class="method">release()</tt> to make it larger than zero. This is done with
proper interlocking so that if multiple <tt class="method">acquire()</tt> calls are
blocked, <tt class="method">release()</tt> will wake exactly one of them up. The
implementation may pick one at random, so the order in which blocked
threads are awakened should not be relied on. There is no return
value in this case.
<P>
When invoked with <var>blocking</var> set to true, do the same thing as
when called without arguments, and return true.
<P>
When invoked with <var>blocking</var> 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><b><a name='l2h-1655'><tt class='method'>release</tt></a></b> ()
<dd>
Release a semaphore,
incrementing the internal counter by one. When it was zero on
entry and another thread is waiting for it to become larger
than zero again, wake up that thread.
</dl>
<P>
<DIV CLASS="navigation"><p><hr><table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A href="condition-objects.html" tppabs="http://www.python.org/doc/current/lib/condition-objects.html"><img src="previous.gif" tppabs="http://www.python.org/doc/current/icons/previous.gif" border="0" height="32"
alt="Previous Page" width="32"></A></td>
<td><A href="module-threading.html" tppabs="http://www.python.org/doc/current/lib/module-threading.html"><img src="up.gif" tppabs="http://www.python.org/doc/current/icons/up.gif" border="0" height="32"
alt="Up One Level" width="32"></A></td>
<td><A href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html"><img src="next.gif" tppabs="http://www.python.org/doc/current/icons/next.gif" border="0" height="32"
alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Python Library Reference</td>
<td><A href="contents.html" tppabs="http://www.python.org/doc/current/lib/contents.html"><img src="contents.gif" tppabs="http://www.python.org/doc/current/icons/contents.gif" border="0" height="32"
alt="Contents" width="32"></A></td>
<td><a href="modindex.html" tppabs="http://www.python.org/doc/current/lib/modindex.html" title="Module Index"><img src="modules.gif" tppabs="http://www.python.org/doc/current/icons/modules.gif" border="0" height="32"
alt="Module Index" width="32"></a></td>
<td><A href="genindex.html" tppabs="http://www.python.org/doc/current/lib/genindex.html"><img src="index.gif" tppabs="http://www.python.org/doc/current/icons/index.gif" border="0" height="32"
alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" href="condition-objects.html" tppabs="http://www.python.org/doc/current/lib/condition-objects.html">7.5.3 Condition Objects</A>
<b class="navlabel">Up:</b> <a class="sectref" href="module-threading.html" tppabs="http://www.python.org/doc/current/lib/module-threading.html">7.5 threading </A>
<b class="navlabel">Next:</b> <a class="sectref" href="event-objects.html" tppabs="http://www.python.org/doc/current/lib/event-objects.html">7.5.5 Event Objects</A>
</DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<hr>See <i><a href="about.html" tppabs="http://www.python.org/doc/current/lib/about.html">About this document...</a></i> for information on suggesting changes.
</ADDRESS>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -