确定线程何时等待锁定释放

时间:2013-11-22 18:17:18

标签: python multithreading python-multithreading

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

如何判断线程何时等待释放锁定,何时不释放?换句话说,如何知道线程何时被阻止?。

如果可以,我怎么知道这发生了多少次?

1 个答案:

答案 0 :(得分:3)

您可以对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

print语句只是用来显示正在发生的事情,用你想要使用的任何逻辑替换它,例如维护线程被阻塞的计数器。

相关问题