python的几种锁简要总结

初学者笔记,非专业,或有出入。
锁的分类:
1.GIL(Global Interpreter Lock)全局解释器锁
2.同步锁

当一个进程中同时启动的几个线程,需要对同一个资源(比如变量)有update需求时,使用同步锁,可以在同一时间保证只有一个进程占用资源,其他线程处于阻塞中。

3.递归锁

使用场景:
线程一:先使用A,过程中需要用到B,使用完B后,才能继续A的剩余工作;
线程二:先使用B,过程中需要用到A,使用完A后,才能继续B的剩余工作。
死锁发生:线程一get到A时,线程二get到B,而他们都需要对方的资源才能进一步释放自身get的资源,就造成了相互等待。

解决办法:为了防止不同线程抢占不同资源,而又相互等待。可以将资源A和资源B上同样的一把锁(每个资源一把锁,只是锁长的一样,这两把锁可以看作是同一串上的两把锁),然后在线程中进行两次lock动作,这样就可以一次性锁住两个资源。因为是同一串上的,所以在acquire其中一个时,连带另一个也被线程占用,但是也需要一个acquire动作,才能真正lock住另外一个资源。

4.Semaphore

当有10个线程,每次最多只想要并行5个线程时,可以使用threading.Semaphore(5),来规定每次最多5个线程并行进行

5.Condition

浅显的理解是,当两个线程相互有条件要求时,比如库存清零时,消费者会等待,知道生产者生产出产品,而当有库存非零时,生产者等待,消费者消费。

6.Event

当线程A需要线程B来触发时,会用到Event。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值