A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 参商 初级黑马   /  2019-6-27 21:00  /  819 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

互斥锁:对共享数据进行锁定,保证同一时刻只能有一个线程去操作。
​        互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。
互斥锁的使用:
  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. """
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马