57 lines · 1.9 KB · TeX
RawDownload
\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-exclusionvia acquiring and releasing locks. It does not require (or imply)threading or multi-tasking, though it could be useful forthose 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})} pairsrepresenting 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 interfacefor \method{lock()}, where a function is called once the lock isacquired.\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 elementin the queue.\end{methoddesc}