2013-11-22 33 views
2

锁机制(除其他外)存在以阻止不同线程同时访问共享资源。想要使用该资源的线程被阻止,并且必须等待锁释放才能继续。 (纠正我,如果我错了)确定线程何时等待锁释放

我怎么能告诉何时一个线程正在等待一个锁被释放,当不是?换句话说,如何知道线程何时被阻塞?

如果这是可能的,我怎么知道这会发生多少次?

回答

3

您可以使用可选的blocking参数的Lock.acquire()功能,如果你阻止像Lock.acquire(False),该函数将返回False如果锁不能获得(由另一个线程持有)提供False或将收购锁和回报True。您可以使用此与下面的逻辑来判断,如果你的线程就会阻塞:

import threading 
some_lock = threading.Lock() 

# use this code anywhere you need to acquire the lock and check for blocking 
if not some_lock.acquire(False): 
    print 'BLOCKING!' 
    some_lock.acquire() # call again with blocking=True (which is the default) 
else: 
    print 'Acquired lock without blocking' 
# lock has been acquired, make sure you release when done with critical section 

打印语句只是那里显示是怎么回事,你想用什么逻辑替换此,例如维护一个线程被阻塞的时间的计数器。

+0

精彩的回复,非常感谢。 – SmartElectron

+0

除了替换'print','else:'可以被删除。 – martineau

+0

是的,'else'只是为了说明不同的行为,并明确指出,即使你没有输入if套件,锁仍然被获取。 –