Python源码之旅-可重入锁RLock

本文探讨Python的可重入锁RLock的实现,重点关注其源码注释、工作原理和acquire、release方法的流程。通过修改源码进行测试,展示了RLock在不同线程中的行为,揭示了内部计数器如何跟踪锁的持有状态。
摘要由CSDN通过智能技术生成

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对象所属的线程的pid
        self._count = 0

    def acquire(self, blocking=True, timeout=-1):
        me = get_ident()                            #获取当前线程的pid
        if self._owner == me:                       # Rlock所属的线程的pid(self._owner) 是当线程相同,Rlock的计数器+1.
            self._count += 1
            return 1
        # 否则,锁对象的持有者不是主当前线程(或者锁没有被任何线程持有过:self._owner = None)
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值