互斥锁:对共享数据进行锁定,保证同一时刻只能有一个线程去操作。
互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。
互斥锁的使用:
- # 创建锁
- mutex = threading.Lock()
- # 上锁
- metex.acquire()
- # 释放锁
- metex.release()
复制代码
示例代码
- import threading
- # 定义全局变量
- g_num = 0
- # 创建全局互斥锁
- lock = threading.Lock()
- def sum_num1():
- # 上锁
- lock.acquire()
- global g_num
- for i in range(1000000):
- g_num += 1
- # 释放锁
- lock.release()
- print("线程1结束后的计算值sum1为:", g_num)
- def sum_num2():
- # 上锁
- lock.acquire()
- global g_num
- for i in range(1000000):
- g_num += 1
- # 释放锁
- lock.release()
- print("线程2结束后的计算值sum2为:", g_num)
- if __name__ == '__main__':
- # 创建两个线程
- first_thread = threading.Thread(target=sum_num1)
- second_thread = threading.Thread(target=sum_num2)
- # 启动线程
- first_thread.start()
- # 启动线程
- second_thread.start()
-
- """
- 执行结果:
- 线程1结束后的计算值sum1为: 1000000
- 线程2结束后的计算值sum2为: 2000000
- """
复制代码 |
|