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
  • 相关阅读:
    Django基础篇
    知识梳理
    其他类题目
    CDN原理
    OpenStack
    云计算三种服务模式SaaS、PaaS和IaaS
    高并发架构
    Andrid Studio Gradle sync failed: A problem occurred configuring project ':app' 解决方法
    Android Studio 创建项目后“Cannot resolve symbol” 解决办法
    阅读之推荐系统
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9020690.html
Copyright © 2011-2022 走看看