diff options
author | Guido van Rossum <guido@python.org> | 2000-02-04 15:10:34 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-02-04 15:10:34 (GMT) |
commit | 54f22ed30bab2e64909ba2d79205cb4b87c69db2 (patch) | |
tree | ed398e54a04bf75e3f26845e7aacb72452a10627 /Lib/mutex.py | |
parent | 8b6323d3ef78042118c08703f26cb2adf741ea2e (diff) | |
download | cpython-54f22ed30bab2e64909ba2d79205cb4b87c69db2.zip cpython-54f22ed30bab2e64909ba2d79205cb4b87c69db2.tar.gz cpython-54f22ed30bab2e64909ba2d79205cb4b87c69db2.tar.bz2 |
More trivial comment -> docstring transformations by Ka-Ping Yee,
who writes:
Here is batch 2, as a big collection of CVS context diffs.
Along with moving comments into docstrings, i've added a
couple of missing docstrings and attempted to make sure more
module docstrings begin with a one-line summary.
I did not add docstrings to the methods in profile.py for
fear of upsetting any careful optimizations there, though
i did move class documentation into class docstrings.
The convention i'm using is to leave credits/version/copyright
type of stuff in # comments, and move the rest of the descriptive
stuff about module usage into module docstrings. Hope this is
okay.
Diffstat (limited to 'Lib/mutex.py')
-rw-r--r-- | Lib/mutex.py | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/Lib/mutex.py b/Lib/mutex.py index 33509c7..9271d34 100644 --- a/Lib/mutex.py +++ b/Lib/mutex.py @@ -1,58 +1,51 @@ -# Mutual exclusion -- for use with module sched +"""Mutual exclusion -- for use with module sched + +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 0 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 lock, where a function is called once the lock is aquired. +""" -# 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 0 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 lock, where a function is called once the lock is aquired. -# class mutex: - # - # Create a new mutex -- initially unlocked - # def __init__(self): + """Create a new mutex -- initially unlocked.""" self.locked = 0 self.queue = [] - # - # Test the locked bit of the mutex - # + def test(self): + """Test the locked bit of the mutex.""" return self.locked - # - # Atomic test-and-set -- grab the lock if it is not set, - # return true if it succeeded - # + def testandset(self): + """Atomic test-and-set -- grab the lock if it is not set, + return true if it succeeded.""" if not self.locked: self.locked = 1 return 1 else: return 0 - # - # Lock a mutex, call the function with supplied argument - # when it is acquired. - # If the mutex is already locked, place function and argument - # in the queue. - # + def lock(self, function, argument): + """Lock a mutex, call the function with supplied argument + when it is acquired. If the mutex is already locked, place + function and argument in the queue.""" if self.testandset(): function(argument) else: self.queue.append((function, argument)) - # - # Unlock a mutex. If the queue is not empty, call the next - # function with its argument. - # + def unlock(self): + """Unlock a mutex. If the queue is not empty, call the next + function with its argument.""" if self.queue: function, argument = self.queue[0] del self.queue[0] function(argument) else: self.locked = 0 - # |