美文网首页
线程 -- 多线程共享全局变量

线程 -- 多线程共享全局变量

作者: glRu | 来源:发表于2020-07-27 15:57 被阅读0次

1. 在一个函数中对全局变量进行修改的时候,到底是否需要使用 global ?

答:要看你定义的变量是否是可变的。

num = 100

nuns = [11,22]

def test():

    global num

    num+=106

def test2():

    nums.append(33)

print(num)

print(nums)

test()

print(num)

总结:

字符串,元组等就需要加

如果是列表,则不需要加global

例子1:

import threading

import time

g_num= 100

# 定义一个全局变量

def test1():

    global g_num

    g_num+= 1

    print("-----in test1 g_num = %d----" % g_num)

def test2():

    print("-----in test2 g_num = %d----" % g_num)

def main():

    t1= threading.Thread(target=test1)

    t2= threading.Thread(target=test2)

    t1.start()

    time.sleep(1)

    t2.start()

    time.sleep(1)

    print("-----in main Thread g_num =%d---" % g_num)

if __name__== '__main__':

    main()

例子2:

传入参数

import threading

import time

def test1(temp):

    temp.append(33)

    print("-----in test1 temp = %s----" % str(temp))

def test2(temp):

    print("-----in test2 temp = %s----" % str(temp))

g_nums= [11, 22]

def main():

    # target 指定这个线程去哪个函数执行代码

    # args 指定调用函数所传递的参数,且 args 需为元组

    t1= threading.Thread(target=test1, args=(g_nums,))

    t2= threading.Thread(target=test2, args=(g_nums,))

    t1.start()

    time.sleep(1)

    t2.start()

    time.sleep(1)

    print("-----in main Thread g_num = %s---" % str(g_nums))

if __name__== '__main__':

    main()

共享全局变量的缺点:

    造成资源竞争,比如一个列表多个线程写入,最后的结果不一定得到正确的结果

相关文章

  • 多线程

    打印正在运行的多个线程 通过继承的方式实现线程 多线程共享全局变量 多线程共享全局变量 args参数 互斥锁 如果...

  • Python多任务_线程

    简单使用 多线程共享全局变量-互斥锁

  • 2018-08-26

    这周学习了多进程修改全局变量 多线程共享全局变量 UDP介绍

  • Python 高级5

    多任务-线程、多线程执行、线程注意点、自定义线程、多线程-共享全局变量、互斥锁、死锁 1. 多任务-线程 <1>多...

  • python3多线程通信方式,主要理解队列的join()和tas

    多线程通信方式 共享变量 创建全局变量,多个线程公用一个全局变量,方便简单。但是坏处就是共享变量容易出现数据竞争,...

  • 多任务-线程

    必要时可封装 多线程之间全局变量共享,并传参数

  • 线程特有数据(Thread Specific Data)

    在单线程程序中,我们经常要使用全局变量来实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量...

  • 多线程共享全局变量(加入互斥锁)

    #抛开互斥锁,我们先说说多线程共享全局变量问题: 1. 导入包,定义全局变量num(type为int类型) ...

  • 多线程共享全局变量(加入互斥锁)

    #抛开互斥锁,我们先说说多线程共享全局变量问题: 1. 导入包,定义全局变量num(type为int类型) ...

  • 多线程访问成员变量与局部变量

    什么是线程安全?这个首先要明确。线程安全的类,值的是类内共享的全局变量的访问要保证在多线程下影响。由于多线程的访问...

网友评论

      本文标题:线程 -- 多线程共享全局变量

      本文链接:https://www.haomeiwen.com/subject/pstzlktx.html