zoukankan      html  css  js  c++  java
  • 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解释器的执行权,用来保证执行效果。

  • 相关阅读:
    HTML+CSS+JS设计注册页面
    1.20学习总结
    Linux安装python3
    Linux命令
    vue安装
    Python实现发送邮件
    C语言带参数的main函数
    Fibonacci 数列递归 重复计算
    gray code 格雷码 递归
    河内塔
  • 原文地址:https://www.cnblogs.com/msj513/p/9947505.html
Copyright © 2011-2022 走看看