原因: 竞争资源 程序推进顺序不当 必要条件: 互斥条件 请求和保持条件 不剥夺条件 环路等待条件 处理死锁基本方法: 1.预防死锁(摒弃除 1 以外的条件) 2. 避免死锁(银行家算法) 3.检测死锁(资源分配图) 4.解除死锁 5.剥夺资源 6.撤销进程 7.数据库 ...
分类:
其他好文 时间:
2018-10-04 11:45:26
阅读次数:
156
ReentrantLock概述 ReentrantLock是Lock接口的实现类,可以手动的对某一段进行加锁。ReentrantLock可重入锁,具有可重入性,并且支持可中断锁。其内部对锁的控制有两种实现,一种为公平锁,另一种为非公平锁。ReentrantLock的实现原理为volatile+CAS ...
分类:
其他好文 时间:
2018-08-26 18:16:29
阅读次数:
171
一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同的程序并发操作多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会。按顺序对表进行 ...
分类:
数据库 时间:
2018-08-04 19:04:06
阅读次数:
271
在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术: 加锁顺序 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。 如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子: 如果一个线程(比如线程3)需要一些锁,那么它必须按照确定的顺序获取锁 ...
分类:
编程语言 时间:
2018-07-30 21:32:26
阅读次数:
173
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而 ...
分类:
数据库 时间:
2018-07-26 21:20:38
阅读次数:
253
做惯了讲究响应速度的微小化web服务,当有人给我讲分布式锁时深刻怀疑说这个名词的哥们要么准备给我挖坑,要么自己把架构玩脱了已经掉进了坑里。这个东西虽然常见,但是稍有不慎就会掉坑里出不来。 系统做的越多现在越来越害怕那种千钧一发的系统,动辄每秒单例服务响应web业务请求百万上下,这样的实现功力确实佩服 ...
分类:
其他好文 时间:
2018-07-21 17:01:45
阅读次数:
140
本篇先介绍多任务的概念、随后介绍关于threading模块下thread类创建子线程的流程以及理解,最后关于互斥锁。死锁以及如何避免死锁等知识。而关于进程在下一篇进行介绍。 一、概念 在了解多任务或者线程等知识之前,我们首先需要对一些概念性知识有一定的了解。 1、时间片轮转 假如终端为单核CPU,而 ...
分类:
编程语言 时间:
2018-07-10 23:37:58
阅读次数:
238
1.死锁的产生原因,和如何避免死锁? 2.多线程中堆栈哪个是私有的? 答案是栈,多线程之间栈是私有的,堆和全局变量等是公共的。 3.说说什么是智能指针? 智能指针实际上是对普通指针加了一层封装机制,这层封装机制是为了使得智能指针可以方便的管理一个对象的生命期。为了防止内存泄漏,在智能指针过期时,其析 ...
分类:
其他好文 时间:
2018-06-30 23:03:09
阅读次数:
487
一、何为死锁 采用多线程是为了改善系统资源的利用并提高系统的处理能力。然而,在实际使用过程中,会遇到新的问题——死锁。所谓死锁,就是多个线程因为资源竞争而造成的一种互相等待的状态,若无外力作用,这种状态会一直维持。 二、死锁的原因 举个死锁产生的例子: 三、如何避免死锁 1.加锁顺序(线程按照一定的 ...
分类:
编程语言 时间:
2018-05-30 19:25:13
阅读次数:
172
主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是《Java Concurrency in Practice》,结合自己的理解和实际应用对锁机制进行一个小小的总结。 首先需要强调的一点是:所有锁(包括内置锁和高级锁)都是有性能消耗的,也就是说在高并发的情况下,由于锁机制带来的上下文切换、资源同步 ...
分类:
编程语言 时间:
2018-05-26 20:24:49
阅读次数:
180