深入理解 GIL:以及线程锁Lock()与RLock()

深入理解 GIL:如何写出高性能及线程安全的 Python 代码

伯乐在线:http://python.jobbole.com/87743/  

翻译自:https://opensource.com/article/17/4/grok-gil

线程锁:http://python.jobbole.com/82723/

python threading模块有两类锁:互斥锁(threading.Lock )和可重用锁(threading.RLock)

互斥锁:lock.acquire() lock.acquire() 造成迭代死锁。

“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。

可重用锁:rlock.acquire() rlock.acquire() 不会造成迭代死锁。

 

加锁的结果会造成阻塞,而且会造成开锁大。会根据顺序由并发的多线程按顺序输出,如果后面的线程执行过快,需要等待前面的进程结束后其才能结束

貌似有点像队列的概念了 ,不过在加锁的很多场景下确实可以通过队列去解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值