• 【Python高级编程015 ● 多任务编程 ● 线程同步的方式一:线程等待join】



    ---------Python基础编程---------

    Author : AI菌


    【内容讲解】

    一、线程之间共享全局变量数据出现错误问题的解决办法:线程同步
    二、线程同步的理解:
        线程同步: 就是保证同一时刻只能有一个线程去操作全局变量;
        同步: 就是协同步调,按预定的先后次序进行运行;
        注意:同步不是一起执行的意思,需要与日常生活中的同步区分开。
    二、线程同步的两种方式:
        1、线程等待(join)
        2、互斥锁

    【代码演示】

    """
    一、线程之间共享全局变量数据出现错误问题的解决办法:线程同步
    二、线程同步的理解:
        线程同步: 就是保证同一时刻只能有一个线程去操作全局变量;
        同步: 就是协同步调,按预定的先后次序进行运行;
        注意:同步不是一起执行的意思,需要与日常生活中的同步区分开。
    二、线程同步的两种方式:
        1、线程等待(join)
        2、互斥锁
    """
    
    # 定义两个函数,实现循环100万次,每循环一次给全局变量加1
    # 创建两个子线程执行对应的两个函数,查看计算后的结果
    # 如果计算过程不出错,两个子线程执行完毕,全局变量的值应该是200万
    
    import threading
    
    # 定义全局变量
    g_num = 0
    
    
    # 循环1000000次,每循环一次给全局变量加1
    def calc_num1():
        # 声明此处加上global表示要修改全局变量的内存地址
        global g_num
        for i in range(1000000):
            g_num += 1
    
        print("calc_num1:", g_num)
    
    
    # 循环1000000次,每循环一次给全局变量加1
    def calc_num2():
        # 声明此处加上global表示要修改全局变量的内存地址
        global g_num
        for i in range(1000000):
            g_num += 1
    
        print("calc_num2:", g_num)
    
    
    if __name__ == '__main__':
        # 创建第一个子线程
        first_thread = threading.Thread(target=calc_num1)
        # 创建第二个子线程
        second_thread = threading.Thread(target=calc_num2)
    
        # 启动线程执行任务
        first_thread.start()
    
        # 主线程等待第一个子线程执行完成以后程序再执行(线程同步)
        first_thread.join()
    
        # 启动线程执行任务
        second_thread.start()

    【运行结果】

    calc_num1: 1000000
    calc_num2: 2000000

    【往期精彩】

    ▷【Python基础编程196 ● 读取文件的4种方式】
    ▷【Python基础编程197 ● 读取文件的4种方式】
    ▷【Python基础编程198 ● 读取文件的4种方式】
    ▷【Python基础编程199 ● Python怎么读/写很大的文件】
    ▷【Python基础编程200 ● 读取文件的4种方式】
    ▷【Python基础编程201 ● 读取文件的4种方式】
    ▷【Python基础编程202 ● 读取文件的4种方式】
    ▷【Python基础编程203 ● 读取文件的4种方式】

    【加群交流】



  • 相关阅读:
    [LeetCode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
    [LeetCode] 103. Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
    Notepad++ Shortcuts 快捷键
    IplImage 与 QImage 相互转换
    [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
    QMessageBox 使用方法
    Qt5 和 Qt4 的一些改动和不同
    Qt5.4 VS2010 Additional Dependancies
    [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
    [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/13622073.html
Copyright © 2020-2023  润新知