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...')
  • 相关阅读:
    作业三
    作业二
    4.9上机作业
    4.2Java
    Java作业
    第四周上级作业
    第三周作业
    第一次上机练习
    [ZJOI2009]假期的宿舍
    [ZJOI2007]矩阵游戏
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14854096.html
Copyright © 2011-2022 走看看