• 同步锁(28-2)


    只要是线程就会有锁!
    GIL锁:控制的CPU执行一次只能执行一个线程。
    自己加锁:确保执行完一个线程,才会切换下一个线程。

    # 一个数字100,让100次线程执行-1操作,最后结果为0
    # 因为每一个线程中没有任何阻塞或者time.sleep()

    import
    threading
    def SubNum():  # 定义一个减法函数
      global num   # 在函数内操作全局变量
      num -=1    # -1操作

    num = 100    # 全局变量100

    thread_list = []  # 储存100个线程

    for i in range(100):  # 执行100次线程
      t = threading.Thread(target=SubNum,)
      t.start()
      thread_list.append(t)  # 执行的每一个线程都添加到一个空列表里去

    for t in thread_list:  # 遍历所有线程
      t.join()
    print("最后一个数字:", num)  # 执行完100线程后的num
      

    ----------------------------------------------------------------------------------------------------------------------------------

    多一步操作

    import time
    import threading

    def SubNum():
      global num
      temp = num  # 多了一步操作,CPU花的时间比较就多一点
      time.sleep(0.0001)  # CPU切换线程
      num = temp-1

    num = 100

    thread_list = []
    for i in range(100):
      t = threading.Thread(target=SubNum,)
      t.start()
      thread.append(t)

    for t in thread_list:
      t.join()
    print("最后一个数字:", num)

    运行结果:
    最后一个数字:91  # 数字不固定
    

     -----------------------------------------------------------------------------------------------------------------------------------

    同步锁:

    遇到任何阻塞或者time.sleep()都会执行完才切换线程。

    import time
    import threading

    def SubNum():
      dlobal num
      r.acquire()  # 2 打开这把锁
      temp = num
      time.sleep(0.0001)
      num = temp-1
      r.release()  # 3 释放这把锁

    num = 100
    r = thread.Lock()  # 1 定义一个锁
    thread_list = []
    for i in range(100):
      t = threading.Thread(target=SubNum)
      t.start()
      thread_list.append(t)

    for t in thread_list:
      t.join()      # 所有线程执行完才执行后面代码
    print("最后一个数字:",num)

    运行结果:

    最后一个数字:0

  • 相关阅读:
    霍夫直线检测进行复杂环境的树干提取
    matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪
    deep learning 练习 牛顿法完成逻辑回归
    deep learning 练习 多变量线性回归
    deep learning 练习1 线性回归练习
    关于移动端键盘弹出
    关于Redux
    docker registry的CI规划
    建立自己的私有docker(ssl&login auth)
    逻辑编程
  • 原文地址:https://www.cnblogs.com/uncle-kay/p/9614617.html
Copyright © 2020-2023  润新知