死锁、分布式锁、进程锁、线程锁

死锁问题

    必要条件:互不保环(死锁是循环等待的充分不必要条件) 产生原因:对不可剥夺资源竞争、进程推进顺序不当、信号量使用不当先互斥后同步导致的 处理策略:分为当死锁未发生时候与死锁已经发生时(区别也就是死锁是否已经发生)。死锁还没有发生时,通过破坏四大必要条件来预防死锁,这种方法也就称之为静态策略;另一种就是用某种方法(银行家算法)防止系统进入不安全状态,从而达到避免死锁,这种方法称之为动态策略。当死锁已经发生时,通过检测死锁的算法来检测死锁的发生(根据死锁定理来简化资源分配图),然后采取某种策略解除死锁(夺撤回三种方法)。 解除方法:夺撤回

应用

    线程锁:

主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段(我的理解是可以通过使用互斥信号量来实现,有点类似于PV操作进入临界资源和退出临界资源的作用一样,保证了只有一个线程使用临界资源)。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。

    进程锁:

为了控制同一操作系统中多个进程访问同一个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。

    分布式锁:

当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。

经验分享 程序员 微信小程序 职场和发展