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


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

      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

    运行结果:

      

      

      

  • 相关阅读:
    (转)Delphi写COM+的心得体会
    delphi透明组件(控件)开发
    Delphi 常用组件常见属性说明
    DELPHI方面输入EDIT
    BYTE 转字符串
    椭圆按纽制作
    数据库实例学生名册管理系统(DAO的使用实验)
    数据库如何快速创建连接字符串
    数据库使用DataReader的简单实例(两种办法)
    数据库ADO.NET的结构
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14304941.html
Copyright © 2020-2023  润新知