Python 同步 上锁解锁过程

同步就是协同步调,按预定的先后次序进⾏运⾏

#创建锁 

mutex = threading.Lock()

#锁定 

mutex.acquire([blocking]) 

#释放

mutex.release()

其中,锁定⽅法acquire可以有⼀个blocking参数。

如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为⽌ (如果没有指定,那么默认为True) 如果设定blocking为False,则当前线程不会堵塞

使⽤互斥锁实现上⾯的例⼦的代码如下

 

#True表示堵塞 即如果这个锁在上锁之前已经被上锁了,那么这个线程会在这⾥⼀直等

#False表示⾮堵塞,即不管本次调⽤能够成功上锁,都不会卡在这,⽽是继续执⾏下⾯

上锁解锁过程

当⼀个线程调⽤锁的acquire()⽅法获得锁时,锁就进⼊“locked”状态

每次只有⼀个线程可以获得锁。如果此时另⼀个线程试图获得这个锁,该线 程就会变为“blocked”状态,称为“阻塞”直到拥有锁的线程调⽤锁的 release()⽅法释放锁之后,锁进⼊“unlocked”状态。

线程调度程序从处于同步阻塞状态的线程中选择⼀个来获得锁,并使得该线 程进⼊运⾏(running)状态

 

锁的好处:

确保了某段关键代码只能由⼀个线程从头到尾完整地执⾏

 

锁的坏处:

阻⽌了多线程并发执⾏,包含锁的某段代码实际上只能以单线程模式执 ⾏,效率就⼤⼤地下降了 由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对⽅持有 的锁时,可能会造成死锁

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值