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
因为多线程共享地址空间,所以 产生的100个线程会执行100次,100-1 所以结果是99
from threading import Thread,Lock
import time
n=100
def task():
global n
mutex.acquire()
temp=n
time.sleep(0.1)
n=temp-1
mutex.release()
if __name__ == '__main__':
mutex=Lock()
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
加互斥锁串行运行100-1 所以运行100次结果为0