zoukankan      html  css  js  c++  java
  • 线程之间共享全局变量数据时出现错误问题

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

      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

    运行结果:

      

      

      

  • 相关阅读:
    Win32 服务进程和单实例实现
    Win32开发(命令行参数处理)
    动态链接库
    Poco 配置文件读取
    Delphi 窗口消息
    【原创】用phantomjs爬取网页数据
    【原创】搭建spark环境二
    【原创】搭建spark环境
    python爬虫——抓取电影天堂电影信息
    【学习笔记】Python 小练习—数据挖掘
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14304941.html
Copyright © 2011-2022 走看看