threading多线程资源加锁控制
# 线程.
import threading
def incr(n):
global a
for i in range(n):
try:
lock.acquire() # 加锁相当于单线程了, 所以加锁的位置应该少;(py自带GIL锁).
a += 1
finally:
lock.release()
def decr(n):
global a
for i in range(n):
try:
lock.acquire()
a -= 1
finally:
lock.release()
if __name__ == "__main__":
lock = threading.Lock() # create Lock obj.
a = 0
n = 1000000 # 不加Lock, 如果这里n的值过大, 那么计算出的来的a的值就不是0了.
t1 = threading.Thread(target=incr, args=(n,))
t2 = threading.Thread(target=decr, args=(n,))
t1.start()
t2.start()
t1.join()
t2.join()
print(a) # 多线程使用共享资源可能出现异常.使用加锁来解决, Lock