2
锁机制(除其他外)存在以阻止不同线程同时访问共享资源。想要使用该资源的线程被阻止,并且必须等待锁释放才能继续。 (纠正我,如果我错了)确定线程何时等待锁释放
我怎么能告诉何时一个线程正在等待一个锁被释放,当不是?换句话说,如何知道线程何时被阻塞?
如果这是可能的,我怎么知道这会发生多少次?
锁机制(除其他外)存在以阻止不同线程同时访问共享资源。想要使用该资源的线程被阻止,并且必须等待锁释放才能继续。 (纠正我,如果我错了)确定线程何时等待锁释放
我怎么能告诉何时一个线程正在等待一个锁被释放,当不是?换句话说,如何知道线程何时被阻塞?
如果这是可能的,我怎么知道这会发生多少次?
您可以使用可选的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
打印语句只是那里显示是怎么回事,你想用什么逻辑替换此,例如维护一个线程被阻塞的时间的计数器。
精彩的回复,非常感谢。 – SmartElectron
除了替换'print','else:'可以被删除。 – martineau
是的,'else'只是为了说明不同的行为,并明确指出,即使你没有输入if套件,锁仍然被获取。 –