Python 线程互斥锁 死锁 递归锁 信号量

2025-04-19 00:09:04

1、继承类方式创建线程对象继承threading类,有了所有threading的方法重写run()方法,run方法是类里面的一个方法,重写的话会走自己定义的内容

Python 线程互斥锁 死锁 递归锁 信号量

2、线程安全问题time.sleep的时候100个线程拿到的temp值都是100所以最终结果是99

Python 线程互斥锁 死锁 递归锁 信号量

3、图解线程安全问题当遇到IO的时候线程会切换

Python 线程互斥锁 死锁 递归锁 信号量

4、互斥锁一个线程加上互斥锁之后,其他线程acquire不了锁,其他线程会阻塞住,其他线程都会等待释放锁lock=threading.Lock() #获取锁对象lock.acquire() #获取锁lock.release() #释放锁

Python 线程互斥锁 死锁 递归锁 信号量

5、死锁 就是两把锁互相等待着一把锁的释放当线程1释放foo的A和B锁,在获取bar的B锁,这个时候线程2获取foo的A锁,这样就成了死锁bar等待释放A锁,foo等待释放B锁

Python 线程互斥锁 死锁 递归锁 信号量

6、递归锁Rlock解决了死锁问题Rloc氯短赤亻k内部维护着一个Lock和一个counter变量,counter记录了acquir髫潋啜缅e的次数,Rlock允许多次acquire和多次release,这就是他跟互斥锁的不同,互斥锁只能一次acquire和releaseRlock每次acquire一次counter加一,release一次减一只要计数器大于0其他线程不具有抢这个锁的资格,所以不会有死锁问题创建RLOCK很简单RLOCK=threading.RLock()

Python 线程互斥锁 死锁 递归锁 信号量

7、信号量Semaphoresignal = threading.Semaphore(6)同时有6个线程可以获得这把锁递归锁是一把大锁里面一层一层嵌套的,信号量是并坐逃缥卯列的信号量解决的就是最大连接数连接池的概念,这个口子只能同时6个人访问,其他人排队信号量创建方法跟互斥锁一样,获取锁对象,加锁,释放锁

Python 线程互斥锁 死锁 递归锁 信号量
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢