zoukankan      html  css  js  c++  java
  • 同步锁(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

  • 相关阅读:
    各种平衡树板子
    字符串板子
    数学公式/定理/板子整理
    线性筛 板子整理
    set乱搞时需注意的坑点
    可持久化数据结构板子整理(可持久化 线段树/字典树/可并堆)
    洛谷p2483 模板k短路 可持久化可并堆
    p4929 DLX舞蹈链
    百度ai 图像增强与特效
    百度ai php请求获取access_token返回false
  • 原文地址:https://www.cnblogs.com/uncle-kay/p/9614617.html
Copyright © 2011-2022 走看看