## 多线程共享全局变量 但是 因为线程执行是无须的 所以会出现资源竞争的问题 如下所示
这样会导致得到的数据不符合我们的期望。为了解决资源竞争的问题,线程中有两个解决办法:
1. 线程同步,第一个线程执行完毕后,第二个才开始,如上图25行
2. 利用互斥锁,如下代码:
import threading
num = 0
# 创建互斥锁
lock = threading.Lock()
# 任务1:循环1000000次每循环1次全局变量加1
def sum1():
# 上锁
lock.acquire()
global num
for i in range(1000000):
num += 1
print("sum1:", num)
# 释放锁
lock.release()
# 任务2:循环10000000次每循环1次全局变量加1
def sum2():
# 上锁
lock.acquire()
global num
for i in range(1000000):
num += 1
print("sum2:", num)
# 释放锁
lock.release()
if __name__ == '__main__':
# 创建两个线程分别执行对应相加任务
first_thread = threading.Thread(target=sum1)
second_thread = threading.Thread(target=sum2)
first_thread.start()
second_thread.start()
# 互斥锁: 保证同一时刻只有一个线程去执行代码,其它线程没有抢到锁会等待
# 提示:加上互斥锁,哪个线程抢到锁我们决定不了,因为,线程执行是无序
# 注意点: 线程同步和加上互斥锁把多任务瞬间该成单任务,性能会下降
# 注意:加上锁之后要及时释放锁,否则会出现死锁。
网友评论