• 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()
    
  • 相关阅读:
    10.16(day54)
    10.17(day55)
    10.15(day53)
    10.14(day52)
    10.12(day51)
    10.11(day50)form表单,css的引入,css选择器,css修改字体属性
    10.10(day49)初识前端,html基础
    9.25(day44)
    9.24(day43)
    9.23(day42)数据库的配置,数据库表的引擎,数据类型,约束条件
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9709328.html
Copyright © 2020-2023  润新知