1.资源竞争问题:sum+=1执行时大致会分为三步(取值、加1、写回),可能刚执行2步cpu就去切换到了另一个线程去执行;
2.解决办法:1.使用join()方法来设置线程同步(效率不高),2.加锁(可以保证同一时刻只有一个线程在执行)。
'''
资源竞争问题:sum+=1执行时大致会分为三步(取值、加1、写回),可能刚执行2步cpu就去切换到了另一个线程去执行
解决办法:1.使用join()方法来设置线程同步(效率不高),2.加锁(可以保证同一时刻只有一个线程在执行)
'''
import threading
import time
sum=0
lock=threading.Lock()
def add_num1():
global sum
for i in range(1000000):
# lock.acquire() # 加锁
sum+=1
# lock.release() # 解锁
print(f'{threading.current_thread().name}的计算结果是{sum}')
def add_num2():
global sum
for i in range(1000000):
# lock.acquire()
sum+=1
# lock.release()
print(f'{threading.current_thread().name}的计算结果是{sum}')
if __name__ == '__main__':
t1=threading.Thread(target=add_num1)
t2=threading.Thread(target=add_num2)
t1.start()
# 设置阻塞函数,设置线程同步
t1.join()
t2.start()
print(f'Main的sum值是{sum}')