python 互斥锁的概念和使用

这篇博客主要探讨了Python中的互斥锁在解决多线程资源竞争问题中的作用。资源竞争通常由于多线程共享全局资源且无限制访问导致,而互斥锁通过确保任意时刻只有一个线程能持有锁来防止数据错误。虽然互斥锁可以有效避免资源竞争,但可能会降低执行效率,将多线程执行变为串行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 互斥锁解决资源竞争-重点

1.1 资源竞争产生原因:

​ 1 多线程共享全局资源

​ 2 多个线程不加限制随意访问全局资源 产生竞争 导致数据错误

1.2 互斥锁使用

​ 加互斥锁(保证任意时刻只有一个线程能够占有锁)

​ 1 访问资源先加锁 (已被占用则等待直到别人释放) ;2 使用 ;3 完成释放锁

import threading

g_number = 0

def update_number(lock):
    """让子进程运行"""
    global g_number
    for i in range(10000000):
        # 尝试加锁  如果没有人锁定 成功;如果有人 等待
        lock.acquire()

        g_number += 1

        # 释放锁
        lock.release()

if __name__ == '__main__':
    # 在门上安装一把互斥所
    lock = threading.Lock()

    # 1 创建一个子线程 运行 update_number
    thd1 = threading.Thread(target=update_number, args=(lock,))
    thd1.start()

    thd2 = threading.Thread(target=update_number, args=(lock,))
    thd2.start()


    # 2 创建一个全局变量
    # 3 让子线程修改全局变量 
    # 4 让主线程等待子线程退出 打印全局变量的值 
    #    如果这个值和子线程设置的值 说明线程间共享全局资源 ; 否则不共享
    thd1.join()
    thd2.join()
    print("得到最终值为%s" % g_number)
1.3 互斥锁优缺点

优点:

​ 能够解决资源竞争问题

缺点:

​ 执行效率低(多线程模式变成 one-by-one 串行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值