[Tutor] locks and threads

Kent Johnson kent37 at tds.net
Sun Aug 3 05:38:50 CEST 2008


On Sat, Aug 2, 2008 at 2:36 PM, James <jtp at nc.rr.com> wrote:
> All,
>
> I'm trying to write a class that will acquire a lock before entering a
> critical section, and then release it. Does this look like the right
> way to go about accomplishing my goal?
>
> try:
> grabLock = self.lock.acquire( 0 )
>        if grabLock:
>                print 'acquired lock successfully'
>        else:
>                print "did *not* obtain lock"
>                < ** what do I put here? ** >
> finally:
>        if grabLock is True:
>
>                <do something "critical" here>
>                self.lock.release()
>                print 'released lock'
>
> What should I be doing in the else: statement? If I can't grab the
> lock, should I simply try again? Maybe a while loop that keeps trying
> until I grab the lock? (I'm not really sure how I'm going to integrate
> the 'try' statement with the while loop, though, to solve the problem
> of not grabbing the lock)

What are you using for the lock. A threading.Lock will block if you
try to acquire it and it is not available.

Why do you need the try? You could put the acquire in a while loop.
You probably want to sleep in the loop, so you don't chew up too much
CPU.

Kent


More information about the Tutor mailing list