为解决多线程使用全局变量的问题,引入互斥锁,修改代码如下:
from threading import Thread,Lock
import time
num = 0
def test1():
global num
mutex.acquire()
for i in range(1000000):
num += 1
mutex.release()
print("---test1---num=%d"%num)
def test2():
global num
mutex.acquire()
for i in range(1000000):
num += 1
mutex.release()
print("---test2---num=%d"%num)
mutex = Lock()
p1 = Thread(target=test1)
p1.start()
p2 = Thread(target=test2)
p2.start()
print("---num=%d---"%num)
简单来说互斥锁,就是先要引入Lock,然后在主线程实例化锁对象,最后在子线程操作全局变量时候上锁,操作完成后解锁。