zoukankan      html  css  js  c++  java
  • Python并发编程-线程锁

    互斥锁-Lock

    #多线程中虽然有GIL,但是还是有可能产生数据不安全,故还需加锁
    from threading import Lock, Thread #互斥锁
    import time
    def eat1(lock):
        global n
        lock.acquire()
        temp =n
        time.sleep(0.2)
        n = temp - 1
        lock.release()
    
    if __name__ == '__main__':
        n = 10
        t_lst = []
        lock = Lock()
        for i in range(10):
            t = Thread(target=eat1,args=(lock,))
            t.start()
            t_lst.append(t)
        for t in t_lst: t.join()
        print(n)
    

    递归锁-RLOCK

    from threading import RLock, Thread #RLock递归锁
    import time
    
    noddle_lock =fork_lock =RLock() #必须这么写,不能分开两行
    # fork_lock = RLock()
    def eat1(name):
        noddle_lock.acquire()
        print('%s拿到面条了'%name)
        fork_lock.acquire()
        print('%s拿到叉子了'%name)
        print('%s吃面了'%name)
        fork_lock.release()
        noddle_lock.release()
    
    def eat2(name):
        fork_lock.acquire()
        print('%s拿到叉子了'%name)
        time.sleep(1)
        noddle_lock.acquire()
        print('%s拿到面条了'%name)
        print('%s吃面了'%name)
        noddle_lock.release()
        fork_lock.release()
    
    Thread(target=eat1,args=('alex',)).start()
    Thread(target=eat2,args=('egon',)).start()
    Thread(target=eat1,args=('bossjin',)).start()
    Thread(target=eat2,args=('nezha',)).start()
    
  • 相关阅读:
    感谢那些给予我无偿帮助的人!
    软件工程总结
    《暗时间》部分感想!
    四个数混合运算,数据库存题,程序集构建三层建构
    三个数混合运算和三层架构
    需求
    数据库实现,以及工厂方法模式实现
    WPF中实现
    git简单操作
    git操作??
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9709328.html
Copyright © 2011-2022 走看看