'''同步锁(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)