GIL和互斥锁
GIL和互斥锁的区别
全局锁不能保证自己开启线程安全,但是能保证解释器中的数据是安全的
GIL在线程调用解释器,自动加锁,在遇到IO操作的情况或代码执行完成时,自动解锁。
from threading import Thread,Lock import time mutex = Lock() num = 1#通过互斥锁放置数据同时被修改 def task(): global num # print(num) mutex.acquire() temp = num print(temp) time.sleep(1) # 当你们线程中出现io时 GIL锁就解开 num = temp + 1 mutex.release() # 线程任务结束时GIL锁解开 t1 = Thread(target=task,) t2 = Thread(target=task,) t1.start() t2.start() t1.join() t2.join() print(num)
所以GIL全局解释锁是工作在同一进程中,使得同一进程众多线程是以串行的方式执行。GIL用来保证同一进程的解释器资源被合理竞争。互斥锁则是可保证需要的代码拥有cpu解释器的执行权,用来保证执行效果。