其中关于用with语句上锁的优点是with语句有点:出异常也会release。当然也可以用try example
lock.acquire() try: n += 1 finally: lock.release()或是直接用
for _ in range(500000): lock.acquire()#上锁 n += 1 lock.release()#解锁完整的代码如下
import threading import time lock = threading.Lock() n = 0 def add(): global n for _ in range(500000): # lock.acquire()#上锁 with lock: #with语句有点:出异常也会release n += 1 # lock.release()#解锁 # lock.acquire() # try: # n += 1 # finally: # lock.release() def sub(): global n for _ in range(400000): # lock.acquire() with lock: n -= 1 # lock.release() if __name__ == '__main__': #main thread thread_add = threading.Thread(target=add)#创造线程 thread_sub = threading.Thread(target=sub) # 创造线程 thread_add.start()#先调用谁,n先所在把哪个方法里 thread_sub.start()#执行线程 thread_add.join() # join start之后就可以进行了 join本身会等在那等待加法进行完成 thread_sub.join() # join的作用:等待子线程完成后执行主线程,使打印结果合理 print('n = ', n,flush = True)结果呢如下