python3-多线程锁机制

本文介绍了Python3中多线程的锁机制,强调了lock.acquire()和lock.release()的正确使用以避免死锁。推荐使用上下文管理器进行加锁,并讨论了可重入锁RLock在处理锁嵌套问题上的应用。同时,文章还探讨了防止死锁的策略,包括避免同一线程嵌套获取同一锁以及多个线程不按顺序获取多个锁的情况。
摘要由CSDN通过智能技术生成
"""线程中的锁机制"""

"""
有两个线程A和B,A和B里的程序都加了同一个锁对象,当线程A率先执行到lock.acquire()(拿到全局唯一的锁后).
线程B只能等到线程A释放锁lock.release()后(归还锁)才能运行lock.acquire()(拿到全局唯一的锁)并执行后面的代码
"""

使用锁

lock = threading.Lock() # 生成锁对象,全局唯一
lock.acquire() # 获取锁。未获取到的线程会阻塞程序,直到获取到锁才会往下执行
lock.release() # 释放锁,归回锁,其他线程可以拿去用了

注:lock.acquire() 和 lock.release()必须成对出现。否则就有可能造成死锁
为了避免出现死锁情况,推荐使用上下文管理器来加锁
lock = threading.Lock()
with lock:        # with语句会在这个代码块执行前自动获取锁,在执行结束后自动释放锁
    # 这里写自己的代码
    pass
使用锁的意义? -----------加锁是为了对锁内资源(变量)进行锁定,避免其他线程篡改已被锁定的资源,以达到我们预期
# i = []
# i.pop()
# import threading
# def job1():
#     global n
#     for i in range(10):
#         n += 1
#         print('job1', n)
# def job2():
#     global n
#     for i in range(20):
#         n += 10
#         print('job2', n)

# n = 0
# threading_01 = threading.Thread(target=job1)
# threading_02 = threading.Thread(target=job2)
# threading_01.start()
# threading_02.start()
加锁之后进行对比
import threading

def job1():
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值