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

  • 相关阅读:
    javascript 介绍
    命令提示符(命令行)
    node(1) hello world
    用Vgg16来提取特征
    VGG16学习
    注意力模型
    统计学习方法
    数字图像处理(五)
    数字图像处理(四)
    BN
  • 原文地址:https://www.cnblogs.com/msj513/p/9947505.html
Copyright © 2020-2023  润新知