黑马程序员技术交流社区

标题: 互斥锁 [打印本页]

作者: 参商    时间: 2019-6-27 21:00
标题: 互斥锁
互斥锁:对共享数据进行锁定,保证同一时刻只能有一个线程去操作。
​        互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。
互斥锁的使用:
  1. # 创建锁
  2. mutex = threading.Lock()
  3. # 上锁
  4. metex.acquire()
  5. # 释放锁
  6. metex.release()
复制代码

示例代码
  1. import threading

  2. # 定义全局变量
  3. g_num = 0
  4. # 创建全局互斥锁
  5. lock = threading.Lock()

  6. def sum_num1():
  7.     # 上锁
  8.     lock.acquire()
  9.     global g_num
  10.     for i in range(1000000):
  11.         g_num += 1
  12.     # 释放锁
  13.     lock.release()
  14.     print("线程1结束后的计算值sum1为:", g_num)


  15. def sum_num2():
  16.     # 上锁
  17.     lock.acquire()
  18.     global g_num
  19.     for i in range(1000000):
  20.         g_num += 1
  21.     # 释放锁
  22.     lock.release()
  23.     print("线程2结束后的计算值sum2为:", g_num)

  24. if __name__ == '__main__':
  25.     # 创建两个线程
  26.     first_thread = threading.Thread(target=sum_num1)
  27.     second_thread = threading.Thread(target=sum_num2)

  28.     # 启动线程
  29.     first_thread.start()
  30.     # 启动线程
  31.     second_thread.start()
  32.    
  33. """
  34. 执行结果:
  35. 线程1结束后的计算值sum1为: 1000000
  36. 线程2结束后的计算值sum2为: 2000000
  37. """
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2