From 458120dd40db6b4df55a4e96b650e16798ef06a0 Mon Sep 17 00:00:00 2001
From: cinap_lenrek <cinap_lenrek@localhost>
Date: Tue, 3 May 2011 11:25:13 +0000
Subject: add hg and python

---
 sys/src/cmd/python/Doc/lib/libmutex.tex | 57 +++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100644 sys/src/cmd/python/Doc/lib/libmutex.tex

(limited to 'sys/src/cmd/python/Doc/lib/libmutex.tex')

diff --git a/sys/src/cmd/python/Doc/lib/libmutex.tex b/sys/src/cmd/python/Doc/lib/libmutex.tex
new file mode 100644
index 000000000..48936904e
--- /dev/null
+++ b/sys/src/cmd/python/Doc/lib/libmutex.tex
@@ -0,0 +1,57 @@
+\section{\module{mutex} ---
+         Mutual exclusion support}
+
+\declaremodule{standard}{mutex}
+\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
+\modulesynopsis{Lock and queue for mutual exclusion.}
+
+The \module{mutex} module defines a class that allows mutual-exclusion
+via acquiring and releasing locks. It does not require (or imply)
+threading or multi-tasking, though it could be useful for
+those purposes.
+
+The \module{mutex} module defines the following class:
+
+\begin{classdesc}{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 
+\code{(\var{function}, \var{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 
+\code{\var{function}(\var{argument})} pair called,
+implying it now has the lock.
+
+Of course, no multi-threading is implied -- hence the funny interface
+for \method{lock()}, where a function is called once the lock is
+acquired.
+\end{classdesc}
+
+
+\subsection{Mutex Objects \label{mutex-objects}}
+
+\class{mutex} objects have following methods:
+
+\begin{methoddesc}{test}{}
+Check whether the mutex is locked.
+\end{methoddesc}
+
+\begin{methoddesc}{testandset}{}
+``Atomic'' test-and-set, grab the lock if it is not set,
+and return \code{True}, otherwise, return \code{False}.
+\end{methoddesc}
+
+\begin{methoddesc}{lock}{function, argument}
+Execute \code{\var{function}(\var{argument})}, unless the mutex is locked.
+In the case it is locked, place the function and argument on the queue.
+See \method{unlock} for explanation of when
+\code{\var{function}(\var{argument})} is executed in that case.
+\end{methoddesc}
+
+\begin{methoddesc}{unlock}{}
+Unlock the mutex if queue is empty, otherwise execute the first element
+in the queue.
+\end{methoddesc}
-- 
cgit v1.2.3

