zoukankan      html  css  js  c++  java
  • 线程之间的共享全局变量

    为什么线程之间共享全局变量?

      解答:因为多线程是在同一个进程中所以可以共享全局变量。

      

    示例1:不加join方法的效果:

    根据CPU的调度的不同读取和写入两个任务会分别对全局变量进行操作导致期望的结果不能满足。

    from threading import *
    from time import *
    
    
    g_list = []
    
    
    def add_data():
        for i in range(3):
            # 修改全局变量的值,因为列表是可变类型,在原有内存地址上新增数据,所以不需要声明global
            g_list.append(i)
            print("add:", i)
            sleep(0.2)
    
    
    def read_data():
        print("读取数据完成:",g_list)
    
    
    if __name__ == '__main__':
    
        t1 = Thread(target=add_data)
        t2 = Thread(target=read_data)
    
        t1.start()
        t2.start()
    View Code

    执行结果:

    示例2:使用join方法的效果:

    在读取任务之前加上join方法,表示读取数据任务会等待写入数据任务执行完成后再去读取。

    from threading import *
    from time import *
    
    g_list = []
    
    
    def add_data():
        for i in range(3):
            g_list.append(i)
            print("add:", i)
            sleep(0.2)
    
    def read_data():
        print("读取数据完成:", g_list)
    
    
    if __name__ == '__main__':
        t1 = Thread(target=add_data)
        t2 = Thread(target=read_data)
    
        t1.start()
        t1.join()  # t1子线程会等待t2子线程完成数据写入后再去读取
        t2.start()
    View Code

    执行结果:

  • 相关阅读:
    2016年第9本:系统之美
    2016年第8本:不可思议的心理控制实验
    2016年第7本:非暴力沟通
    用SDWebImage渐变加载图片
    iOS相册、相机、通讯录权限获取
    屏蔽iOS10模拟器海量的垃圾debug信息
    Swift
    Swift
    PlaceholderImageView
    Swift
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14304908.html
Copyright © 2011-2022 走看看