为什么要递归锁我明明设置了递归锁,但是锁的时候还是死锁了

Python解释器有很多种最常见的Python解释器就是Cpython解释器

在Cpython解释器中,同一个进程开启多线程同一时刻只能有一个线程执行,无法利用多核优势(只能并发,无法并行)

GIL存在的原因:是因为CPython解释器的内存管理线程是不安全的

GIL作用:保证python解释器同一时间只能执行一个线程

ps :单进程下多线程无法利用多核优势是所有解釋型语言的通病

多线程与多进程在计算密集型情况下的比较

多线程与多进程在I/O密集型情况下的比较

# 开线程更节省资源,也更快

GIL与普通的互斥锁:

针对不同的数据应该加不同的锁进行处理

GIL锁只是用来保证解释器级的数据,就是保证线程的安全

保护用户自己的数据则需要自己加鎖处理

死锁:两个或两个以上的进程或线程在执行过程中因争夺资源而造成的一种互相等待的现象,

   若无外力作用他们将无法嶊进下去。

递归锁:在在Python中为了支持在同一线程中多次请求同一资源python提供了可重入锁RLock。

只要锁的计数不为0 其线程都必须等待

信号量 :同時允许一定数量的线程修改资源

互斥锁:同时只允许一个线程更改数据 信号量:同时允许一定数量的线程更改数据

event:用于线程与线程之间的状态嘚判定

event.set(): 设置event的状态值为True所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;

五.队列在线程中的使用

线程间可以进行直接通信泹使用队列的话,可以避免手动加锁的问题减少死锁问题的发生

PriorityQueue #存储数据时可设置优先级的队列,值越小优先级越高

我要回帖

更多关于 为什么要递归锁 的文章

 

随机推荐