线程共享全局变量

import threading

num=10

def test1():
    global num
    for i in range(3):
        num+=1
    print('执行test1函数num的值:{}'.format(num))

def test2():
    print('执行test2函数num的值:{}'.format(num))

if __name__=='__main__':
    #创建线程
    t1=threading.Thread(target=test1)
    t2=threading.Thread(target=test2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
结果:
执行fun1函数num的值:13
执行fun2函数num的值:13

线程共享全局变量存在问题

在一个进程内所有线程共享全局变量,多线程之间的数据共享比多进程要好。但是可能造成多个进程同时修改一个变量
(即线程非安全),可能造成混乱。

#coding=utf-8
from threading import *

num=0

def tset1():
    global num
    for i in range(100000):
        num+=1
    print('运行tset1函数num的值:{}'.format(num))

def tset2():
    global num
    for i in range(100000):
        num+=1
    print('运行tset2函数num的值:{}'.format(num))

if __name__=='__main__':
    #创建线程
    t1=Thread(target=tset1)
    t2=Thread(target=tset2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
结果:每次执行结果都不一样,即线程不安全
运行tset1函数num的值:100000
运行tset2函数num的值:178000

你可能感兴趣的:(线程共享全局变量)