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解释器的执行权,用来保证执行效果。

原文地址:https://www.cnblogs.com/msj513/p/9947505.html