zoukankan      html  css  js  c++  java
  • 网络编程-线程-5、多个线程共享全局变量造成资源争抢,数据混乱

    知识点:上一节说的多个线程可以共享全局变量,但是存在一个问题:导致资源争抢,数据错误

    1、先看一下代码,创建俩个线程函数,同时修改全局变量的值,打印看下结果:

    #!/usr/bin/env python
    # coding=utf-8
    # author:刘仲
    # datetime:2018/7/23 14:18
    # software: PyCharm
    
    import threading
    import time
    
    num = 0
    # 线程函数1修改num值,循环一百万次,每次加一,理论上num结果为1000000
    def test1(temp):
        global num
        for i in range(temp):
            num += 1
        print('test1-num:%d' % num)
    
    # 线程函数2修改num值,也是循环一百万次,每次加一,理论上test1执行完后,此时test2num结果为2000000
    def test2(temp):
        global num
        for i in range(temp):
            num += 1
        print('test2-num:%d' % num)
    
    def main():
        t1 = threading.Thread(target=test1, args=(1000000,))
        t2 = threading.Thread(target=test2, args=(1000000,))
        t1.start()
        t2.start()
        time.sleep(1)
        print('num:%d' % num)
    
    
    if __name__ == '__main__':
        main()

    运行效果如下:
    test1-num:1255312
    test2-num:1319790
    num:1319790

    我们可以看到通过多线程同时去修改全局变量的值打印的数据结果是混乱的,为什么会这样呢?看下图分析:

  • 相关阅读:
    第08组 Alpha冲刺(1/4)
    第08组 团队Git现场编程实战
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    第一次实践作业
    互联网协议学习笔记
    【选修建模的小练习】长方形椅子的稳定性探究
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9355093.html
Copyright © 2011-2022 走看看