线程之间共享全局变量数据时出现错误问题

一、线程之间共享全局变量

  1、什么时候会出现错误?

    解答:多个线程同时操作全局变量时,可能会出现错误。

  2、造成错误的原因

    解答:这是由于CPU调度机制造成的。

  3、线程同步

    解答:

    保证同一时刻只能一个线程去操作全局变量。

    同步:协同步调,按预定的先后次序进行运行。(类似于生活中的对讲机。)

  4、通过两种线程同步的方式解决以上问题。

    线程等待(join方法),按顺序执行

    互斥锁,不按顺序执行

二、线程之间共享全局变量演示

  

  1、要求:定义两个函数,实现循环100万次,每循环一次给全局变量加1操作。

  2、共享全局变量错误的代码

  

  

from threading import *
from time import *

g_num = 0


def sum_num1():
    for i in range(1000000):
        global g_num
        g_num += 1

    print("sum1:", g_num)


def sum_num2():
    for i in range(1000000):
        global g_num
        g_num += 1

    print("sum2:", g_num)


if __name__ == "__main__":
    t1 = Thread(target=sum_num1)
    t2 = Thread(target=sum_num2)

    t1.start()
   
    t2.start()

运行结果:

  

 3、共享全局变量正确的代码,线程等待(join)

  

from threading import *
from time import *

g_num = 0


def sum_num1():
    for i in range(1000000):
        global g_num
        g_num += 1

    print("sum1:", g_num)


def sum_num2():
    for i in range(1000000):
        global g_num
        g_num += 1

    print("sum2:", g_num)


if __name__ == "__main__":
    t1 = Thread(target=sum_num1)
    t2 = Thread(target=sum_num2)

    t1.start()
    t1.join() # 主线程等待t1运行结束后再执行t2
    t2.start()
View Code

运行结果:

  

  

  

原文地址:https://www.cnblogs.com/yujiemeigui/p/14304941.html