[Zope-dev] ThreadLock module?
Tim Peters
tim at zope.com
Fri Oct 31 10:15:45 EST 2003
[Chris Withers]
> Anyone know what the difference is between Zope's ThreadLock module
> and the standard python Lock objects from the threading module?
A ThreadLock.ThreadLock is reentrant but a threading.Lock isn't: once a
thread has acquired a ThreadLock, that thread can acquire that ThreadLock
again, any number of times, without blocking. This is useful, e.g., for a
lock that wants to give a thread exclusive access to an object's methods,
where some of the methods may invoke other methods of the object.
That isn't true of a threading.Lock: each attempt to acquire an
already-acquired Lock blocks until the Lock is released, regardless of which
thread may be trying to acquire.
The other difference is that an acquired ThreadLock can be released only by
the thread that acquired it, while any thread can release an acquired
threading.Lock.
A threading.RLock (note the "R") has the same semantics as a
ThreadLock.ThreadLock, though. Zope's ThreadLock.c predates Python's
threading.py, and Python didn't offer any form of reentrant lock before
threading.py (although you could build your own on top of Python's thread
module's lock, which is in fact how threading.RLock and
ThreadLock.ThreadLock are implemented).
More information about the Zope-Dev
mailing list