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

    执行结果:

  • 相关阅读:
    P1361 小M的作物 【网络流】【最小割】
    餐巾计划问题 【网络流24题】【费用流】【zkw】
    P1231 教辅的组成 【网络流】【最大流】
    Rikka with coin 思维题
    线段树模板新
    AC自动机 洛谷P3966 单词
    AC自动机 洛谷P5357 模板
    AC自动机 洛谷P3796
    AC自动机 洛谷P3808 模板
    KMP 洛谷P3375
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14304908.html
Copyright © 2011-2022 走看看