线程之间的共享全局变量

 

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

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

  

 

示例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

 

执行结果:

 

 

posted @ 2021-01-20 20:37  御姐玫瑰  阅读(1384)  评论(0)    收藏  举报
levels of contents