zoukankan      html  css  js  c++  java
  • python 并发编程 多线程 互斥锁

    互斥锁 并行变成串行,牺牲效率 保证数据安全,实现局部串行

    保护不同的数据,应该加不同的锁

     

    现在一个进程 可以有多个线程 所有线程都共享进程的地址空间 实现数据共享

    共享带来问题就会出现竞争 竞争就会出现改乱数据

    每个子线程都去执行task函数 代码 都拿到n=99 
    这种方法效率高 ,但是导致数据不安全
    并发执行
    from threading import Thread
    import time
    
    n = 100
    
    def task():
        # 定义全局变量
        global n
        tmp = n
        time.sleep(0.5)
        n = tmp - 1
    
    if __name__ == "__main__":
        t_list = []
        for i in range(100):
            t = Thread(target=task)
            t_list.append(t)
            t.start()
    
        for t in t_list:
            t.join()
    
        print("主线程", n)
    
        '''
        每个子线程都去执行task函数 代码 都拿到n=99 
        这种方法效率高 但是导致数据不安全
        并发执行
        '''
        
    '''
    主线程 99
    '''

    加上互斥锁 牺牲效率 保证数据安全

    通过把并发变成串行

    from threading import Thread, Lock
    import time
    
    n = 100
    
    def task(mitex):
    
        # 定义全局变量
        global n
    
        mitex.acquire()
        tmp = n
        time.sleep(0.1)
        n = tmp - 1
        mitex.release()
    
    if __name__ == "__main__":
        mitex= Lock()
        t_list = []
        for i in range(100):
            t = Thread(target=task, args=(mitex,))
            t_list.append(t)
            t.start()
    
        for t in t_list:
            t.join()
    
        print("主线程", n)
    
    # 主线程 0
  • 相关阅读:
    ylbtech-dbs-m-QQ邮箱
    ylbtech-Bill(发票管理)-数据库设计
    ylbtech-Recode(记录)-数据库设计
    ylbtech-LanguageSamples-Yield
    ylbtech-LanguageSamples-XMLdoc
    ylbtech-LanguageSamples-Versioning(版本控制)
    线程局部变量的使用
    守护线程的创建和运行
    有助于改善性能的技巧
    使用NIO提升性能
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9020690.html
Copyright © 2011-2022 走看看