本文主要是介绍Python源码之旅-可重入锁RLock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python 的可重入锁(RLock)的实现在threading.py文件中,部分源码摘录如下:
1. 源码注释版本
def RLock(*args, **kwargs):"""函数工厂返回一个可重入锁(R锁)对象一个可重入锁必须由获取它的线程释放。一旦一个线程获取一个可重入锁,同一个线程可以无阻塞的再次获取他。线程每次获取该锁后必须释放他。"""if _CRLock is None:return _PyRLock(*args, **kwargs) #Python 语言实现的R锁return _CRLock(*args, **kwargs) # C 语言实现R锁class _RLock(object):def __init__(self):self._block = _allocate_lock() # 获取一个锁self._owner = None # 记录Rlock对象所属的线程的pidself._count = 0def acquire(self, blocking=True, timeout=-1):me = get_ident() #获取当前线程的pidif self._owner == me: # Rlock所属的线程的pid(self._owner) 是当线程相同,Rlock的计数器+1.self._count += 1return 1# 否则,锁对象的持有者不是主当前线程(或者锁没有被任何线程持有过:self._owner = None)# blocking=True的时候阻塞当前的线程&#
这篇关于Python源码之旅-可重入锁RLock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!