版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyy72999/article/details/80667288
当我们用Python
进行 高并行编程的时候,尤其是多线程
threading
编程下 我们会用到内存变量
共享 ,这时候就会用到锁 lock
,但是我们经常会碰到死锁
下面给大家举个例子说一下什么叫做死锁
以及RLOCK/LOCK
的特点以及如何避免死锁
- 死锁的产生
- LOCK
- RLOCK
假设我们有两个并发线程(线程A与线程B),同时还有两个资源(1,2)假设线程A需要资源1,线程B需要资源2,在这种情况下,这两个线程都会自己请求他们自己的锁,一切都可以顺畅的进行下去,不过如果随后在释放锁之前,线程A需要资源2的锁,线程B需要资源1的锁,这对于两个处理来说都是必要的,由于两个资源都被上锁了,因此这两个线程会被阻塞,并相互等待,直到被占用的资源释放为止
Lock
调用acquire会进行获取锁并阻塞状态,当你没有释放release时候在调用acquire的时候就会造成死锁
RLock
正常每一次调用acquire 都会造成阻塞状态,但是当我们在同一个线程内可以一直调用acquire当然他是和release成对出现的