为什么线程间数据不一致?import disdef add1(a): a +=1print(dis.dis(add1)) #查看函数字节码运行方式==============结果============651 0 LOAD_FAST 0 (a) 3 LOAD_CONST 1 (1) 6 INPLACE_ADD 7 STORE_FAST 0 (a) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE说明:当a是全局变量被多个线程使用,可能因为GIL的原因,当运行到RETURN_VALUE的时候,线程刚好被切换到了其他函数进行赋值操作,所以导致返回的数据不是期望结果,解决方法-加锁线程锁'''线程同步:LockRLock缺陷:锁会影响性能,锁会产生死锁lock.acquire 要和lock.release同时用,否则锁无法释放,其他线程一直等待释放RLock:在同一线程里,可以连续调用多次RLock,要求acquire、release数量一致'''from threading import Lock,RLocktotal = 0rlock = RLock()lock = Lock()def add(lock): global total for i in range(1000000): lock.acquire() #Lock连续调多次acquire会产生死锁 total += 1 lock.release() #释放锁def desc(rlock): global total for i in range(1000000): rlock.acquire() #增加锁 rlock.acquire() #可以连续调用多次RLock total -= 1 rlock.release() #释放锁 rlock.release() #释放锁import threadinga = threading.Thread(target=add,args=(lock,))b = threading.Thread(target=desc,args=(rlock,))a.start()b.start()a.join()b.join()print(total)