• 网络编程-线程-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

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

  • 相关阅读:
    【4N魔方阵】
    【2(2N+1)魔方阵 】
    【二分查找法(折半查找法)】
    【循环搜寻法(使用卫兵)】
    【合并排序法】
    【快速排序法一】
    【快速排序二】
    【快速排序三】
    【数据结构】之 线性表详解
    【计算机网络基础】
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9355093.html
Copyright © 2020-2023  润新知