zoukankan      html  css  js  c++  java
  • 多线程 python threading 简单锁/互斥锁

    测试代码:

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    
    num = 0 
    def run(n):
        print 'this is %s num' % n
        global num 
        time.sleep(1)
        num += 1
    
    
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
    
    
    print num

    结果:

    image

    num 为什么没有添加呢? 主要是主进程没有等待该子进程执行完毕就stop了, 所以要等待所有的子进程执行完毕后再结束主进程

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    p_list = []
    num = 0
    def run(n):
        print 'this is %s num' % n
        global num
        time.sleep(1)
        num += 1
    
    
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
        p_list.append(t)
    
    for p in p_list:
        p.join()
    
    print num

    执行结果:

    image

    啊结果怎么是194 啊,不是200吗,着是原因是在线程操作公共数据时候没有添加锁,导致所有拿取公共数据的时候没有规范

    加锁代码

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    p_list = []
    num = 0 
    def run(n):
        print 'this is %s num' % n
        global num 
        time.sleep(1)
        lock.acquire()
        num += 1
        lock.release()
    
    
    lock = threading.Lock()
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
        p_list.append(t)
    
    for p in p_list:
        p.join()
    
    print num

    在看执行结果:

    image  无论你执行多少次都没有问题

  • 相关阅读:
    Spring Cloud
    Java/Android 网络请求框架/库
    Spring Roo 想知道源码,怎么实现自动生成枯燥的有规律的文件
    win10操作系统系统,小米路由器,小米3 的问题
    IntelliJ IDEA
    Spring Boot
    echart 插件实现全国地图
    安装AndroidJDK的坑
    小程序进阶之路
    关于echart柱形图的使用问题
  • 原文地址:https://www.cnblogs.com/zhaogaolong/p/5533956.html
Copyright © 2011-2022 走看看