python中的线程锁,全局锁GIL,互斥锁,递归锁
全局解释器锁GIL
python的全局解释器锁GIL(c python的一个缺陷)
同一时间只能一个线程工作,防止数据出错,因为有可能一份数据同时被两个线程修改。
但是有全局解释器锁GIL的情况下,数据依然可能出错,GIL只是保证同一时间只有一个线程执行。
我们还要加一层锁(互斥锁mutex),这个锁保证同一时间只有一个线程修改数据。这层锁和GIL没关系,是用户加的锁。 加了这个锁,线程就变成串行了。
- 线程同时修改一份数据时必须加互斥锁
递归锁RLock():如果设置了多把锁,就要用递归锁,不然会因为分不清哪个钥匙开哪个门导致锁死
递归锁相当于有一个锁和钥匙的字典,就不会弄混了。