线程互斥锁:降低效率,保证数据安全
线程:数据共享
修改共享数据,数据不安全
from threading import Thread,Lock import time n=100 def task(): global n temp=n time.sleep(0.1) n=temp-1 if __name__ == '__main__': t_l=[] for i in range(100): t=Thread(target=task) t_l.append(t) t.start() for t in t_l: t.join() print(n) 结果: 99 正确结果应该是0
解决办法加锁
from threading import Thread,Lock import time mutex=Lock() n=100 def task(): global n mutex.acquire() temp=n time.sleep(0.1) n=temp-1 mutex.release() if __name__ == '__main__': t_l=[] for i in range(100): t=Thread(target=task) t_l.append(t) t.start() for t in t_l: t.join() print(n) 结果: 0 虽然运行效率变低了,但是数据安全了