标签:__ 全局变量 num 线程 ---------- work1 work2 多线程
多线程共享全局变量
多个线程同时操作一个资源时,会出现资源竞争问题
1.调度线程1修改数据时,可能还未完成修改,调度时间就已经结束
2.调度线程2修改数据,可能在调度时间内完成了修改操作
3.调度回到线程1后,线程1会继续之前未完成的修改操作,导致线程2的修改失效
解决方法:使用join()让某个线程优先执行,由于把多线程变成了单线程,程序性能会下降
import threading
import time
num = 0
# work1
def work1():
# 声明全局变量
global num
for i in range(100000):
num += 1
print('work1----------',num)
# work2
def work2():
global num
for i in range(100000):
num += 1
print('work2----------',num)
# 创建线程
if __name__ == '__main__':
t1 = threading.Thread(target=work1)
t2 = threading.Thread(target=work2)
t1.start()
# 设置线程t1优先执行
t1.join()
t2.start()
# 子线程全部结束后再继续执行
while len(threading.enumerate()) != 1 :
time.sleep(1)
print('main----------',num)
work1---------- 100000
work2---------- 200000
main---------- 200000
标签:__,全局变量,num,线程,----------,work1,work2,多线程 来源: https://www.cnblogs.com/HyeJeong/p/15690896.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。