锁机制(以及其他机制)的存在是为了防止不同线程同时访问共享资源。想要使用资源的线程被阻塞,必须等待锁释放才能继续。 (如果我错了请纠正我)
我如何判断线程何时正在等待释放锁,何时不等待?换句话说,如何知道线程何时被阻塞?
如果可能的话,我怎么知道这种情况发生了多少次?
最佳答案
您可以对 Lock.acquire()
使用可选的 blocking
参数函数,如果你为阻塞提供False
,如Lock.acquire(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
打印语句只是为了显示正在发生的事情,将其替换为您想要使用的任何逻辑,例如维护线程阻塞次数的计数器。
关于python - 确定线程何时等待锁释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151766/