【13】Python3 - 多线程共享变量问题(加锁、解锁、可重入锁)

共享变量问题

  • 当一个进程的多个线程需要访问同一个变量的时候,就产生了共享变量的问题。可以通过加锁或者信号灯的方式,解决此问题。
解决互斥 - 方法1:加锁
  • 锁LOCK:
    • 通常对互斥资源进行加锁,在加锁之后,可以对互斥资源进行排他性的使用。在使用完此互斥资源后,要进行解锁。使其他线程可以对该互斥资源进行下一步操作。
    • 锁lock 其实是一个标志,表示该互斥资源正在被使用。
    • 加锁相当于一个令牌,只有拥有令牌的人,才可以对互斥资源进行访问。
# 要想使用锁,首先需要有锁,即创建一个锁的实例
lock = threading.Lock()

# 加锁到合适位置
lock.acquire()


# 在使用完互斥资源之后,进行解锁
lock.release()
解决互斥 - 方法2:semaphore-信号
  • 通过设置信号,允许一个资源最多有几个线程同时使用。
# 参数定义最多有几个线程可以同时使用资源
semaphore = threading.Semaphore(3)


# 申请semaphore
semaphore.acquire()

# 释放semaphore
semaphore.release()

可重入锁

  • 可重入锁主要解决递归调用的时候,需要申请锁的情况。
  • 一个锁可以被一个线程多次申请。
  • 定义锁的时候用的是RLock,即是可重入锁。
t= threading.RLock()   # 定义锁的时候用的是RLock,即定义了一个可重入锁。

注:本文是本人根据北京图灵学院的python课程自己整理的笔记哒,转载请注明出处哈~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值