python中的线程锁,全局锁GIL,互斥锁,递归锁

全局解释器锁GIL
python的全局解释器锁GIL(c python的一个缺陷)
同一时间只能一个线程工作,防止数据出错,因为有可能一份数据同时被两个线程修改。
python中的线程锁,全局锁GIL,互斥锁,递归锁
python中的线程锁,全局锁GIL,互斥锁,递归锁
但是有全局解释器锁GIL的情况下,数据依然可能出错,GIL只是保证同一时间只有一个线程执行。
python中的线程锁,全局锁GIL,互斥锁,递归锁

我们还要加一层锁(互斥锁mutex),这个锁保证同一时间只有一个线程修改数据。这层锁和GIL没关系,是用户加的锁。 加了这个锁,线程就变成串行了。

  • 线程同时修改一份数据时必须加互斥锁

python中的线程锁,全局锁GIL,互斥锁,递归锁

递归锁RLock():如果设置了多把锁,就要用递归锁,不然会因为分不清哪个钥匙开哪个门导致锁死
python中的线程锁,全局锁GIL,互斥锁,递归锁

递归锁相当于有一个锁和钥匙的字典,就不会弄混了。
python中的线程锁,全局锁GIL,互斥锁,递归锁