进行多个线程操作同一数据时,有可能导致数据进行重复操作,所以多线程操作同一数据时,建议使用线程锁,这样每次操作数据时只能是一个线程。
进行查看Lock是有enter和exit属性也就是上下文的,所以可以直接进行with方法
import threading
n = 200000
lock = threading.Lock()
print(hasattr(lock, '__enter__')) # True
print(hasattr(lock, '__exit__')) # True
def work():
global n
for i in range(1000000):
# # 上锁
# lock.acquire()
# n -= 1
# # 释放锁
# lock.release()
with lock:
n -= 1
if __name__ == '__main__':
# 两个线程共同操作n
t1 = threading.Thread(target=work)
t2 = threading.Thread(target=work)
t1.start()
t2.start()
t1.join()
t2.join()
print(n)