zoukankan      html  css  js  c++  java
  • 同步锁

    '''同步锁(Lock)'''
    import threading
    import time
    
    def sum():
       global num
       # num -= 1 # 运行100个线程,这样做减法,结果为0
       print('begin') # 此步可以看出,在只有同步锁锁上的那三行代码才需要串行,而其它代码也都是并发
       lock.acquire()  # acquire获得
       temp = num
       time.sleep(0.001) # 不上同步锁结果为98或99;100个线程,争先恐后抢夺gil锁,cpu执行有时间轮换,在这个轮换时间里没有计算出结果,就切换到下一个线程了;上了同步锁结果也是为0
       num = temp - 1
       lock.release()  # release释放
       print('stop') # 此步可以看出,在只有同步锁锁上的那三行代码才需要串行,而其它代码也都是并发
    
    num = 100
    l = []
    lock = threading.Lock() # 同步锁,让这个线程(需上锁代码可自行设置)一直在cpu执行,没有执行完毕不切换其它线程
    
    for t in range(100):
       t = threading.Thread(target=sum)
       t.start()
       l.append(t)
    
    for t in l:
       t.join()
    
    print(num)
    
    

    
    
    while True: print('studying...')
  • 相关阅读:
    2-7
    2-6
    2-5
    2-4
    2-3
    2-1
    2-2
    1-1
    5-7
    第六章例6-1
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14854096.html
Copyright © 2011-2022 走看看