gdb是啥意思 什么时候需要分布式锁?
什么时候需要分布式锁?
首先,我们需要知道在非分布式环境中,什么可以用锁来解决?
多线程环境,共享资源线程安全问题!此时,共享资源通常在一台机器的多线程中竞争。从JAVA内存模型的角度来看,我们可以通过锁定对象、方法和代码块来避免共享资源的竞争
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服务中的seckill;
4,分布式环境中的重复提交;
1,使用数据库的唯一主键实现锁定
!2、使用redis指令:通常使用setnx方法,incr方法实现
3、使用zookeeper:使用API生成临时节点实现锁定
解决死锁的方法?
1、消除死锁通常有两种方法:1。资源剥夺法。撤消进程方法。
2、处理死锁的方法如下:
防止死锁:打破防止死锁的四个必要条件中的一个或多个。
避免死锁:在动态分配资源的过程中,使用某种方法防止系统进入不安全状态。
检测死锁:运行时产生死锁,及时查找和思考,释放程序。
死锁释放:发出死锁后,进程被撤销,资源被回收并分配给阻塞进程。
3、防止死锁的方法:
销毁请求和保持条件:
1。一次申请所有资源。在那之后,资源将不被使用。如果不满足资源条件,将不分配资源。
2. 只获取要运行的初始资源,然后释放完成的资源并请求新资源。
破坏非抢占条件:当一个进程获得一些非抢占资源时,它会提出一个新的资源应用。如果它不能满足需求,它将释放所有资源,并在需要时再次应用。
中断循环等待条件:按递增顺序排列资源数和请求资源数。如果一个进程获得一个高序列号的资源,并且想要获得一个低序列号的资源,那么它需要首先释放高序列号的资源。
死锁形成的四个必要条件:
(1)互斥条件:一个资源一次只能由一个进程使用。
(2)请求和保持条件:当进程由于资源请求而被阻止时,它将保持已获取的资源。
(3)非剥夺条件:通过该过程获得的资源在用完之前不能被强行剥夺。
(4)循环等待条件:多个进程之间形成循环等待资源关系。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。