【13】Python3 - 多线程共享变量问题(加锁、解锁、可重入锁)
程序员文章站
2022-05-02 20:21:39
...
共享变量问题
- 当一个进程的多个线程需要访问同一个变量的时候,就产生了共享变量的问题。可以通过加锁或者信号灯的方式,解决此问题。
解决互斥 - 方法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课程自己整理的笔记哒,转载请注明出处哈~
上一篇: vueå¨ç»è¿åº¦
下一篇: jQuery 常见特殊动画效果