内容:通过获取锁的顺序来避免死锁。例如:银行账户转账问题,两个用户转账的话,如果采用一般的synchronized嵌套的话,容易造成死锁,现在我们通过类似哲学家问题的解决方案一样:先获取同一个锁,才有资格获取下一个。而判断是通过System.identityHashCode()来生成类的hashcode()的返回值作为唯一标识,相同的话,我们再加一把锁。
class Account {
pri...
分类:
编程语言 时间:
2015-05-26 21:28:42
阅读次数:
128
实现死锁 #include #include #include #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//初始化了一个MUTEX锁 void *func1(void *arg) { p...
分类:
其他好文 时间:
2015-05-26 20:42:55
阅读次数:
120
进程管理进程的创建、终止、阻塞与唤醒、挂起与激活(条件)信号量机制经典进程同步问题处理机调度与死锁处理机调度的层次调度算法:先来先服务和短作业优先、高优先权优先调度、基于时间片轮转实时调度为什么会产生死锁死锁的处理方法:银行家算法存储器管理存储器的层次结构程序装入和连接存储器分配方式页面分段存储
分类:
其他好文 时间:
2015-05-26 17:56:55
阅读次数:
117
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程...
分类:
编程语言 时间:
2015-05-25 11:39:04
阅读次数:
148
/**
* 书本:《Thinking In Java》
* 功能:哲学家进餐问题
* 作为哲学家,他们很穷,所以他们只能买五根筷子。他们围坐在桌子周围,每人之间放一根筷子。当一个哲学家要就餐的时候了,这个哲学家必须同时得到左边
* 和右边的筷子。如果一个哲学家左边或右边的筷子已经有人在使用筷子了,那么这个哲学家就必须等待,直至可以得到必须的筷子
* 文件:Chopstick.java
* ...
分类:
编程语言 时间:
2015-05-23 10:07:37
阅读次数:
136
今天遇到一个问题,因为mysql所在机器的磁盘满了导致mysql死锁,连查询select都不行,要不是看mysql日志,还真找不到原因。
通过show processlist能看到第一条是个update语句,需要写入数据,因为磁盘满了,写入不了,导致mysql死锁。
查看mysql日志可以发现有告警日志:“[Warning] Disk is full writi...
分类:
数据库 时间:
2015-05-20 20:41:47
阅读次数:
137
死锁:死锁产生的现场:当A进程P S2信号量而B进程P S1信号量时就会产生死锁,由于S2信号量须要B进程释放,而S1信号量须要A进程释放,因此两个进程都在等相互的资源,造成死锁。死锁产生的条件:相互排斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。(信号量s1 ...
分类:
编程语言 时间:
2015-05-20 20:09:26
阅读次数:
182
现象:发现运行在tomcat的应用,不管上多少个vuser模拟请求压力,只会耗用200%的cpu,测出应用的tps很低,近10次每秒。分析:1、网络的瓶颈排除2、执行jstack-l线程号>线程号.loglog如下:3、看出来了0x0000000751968760
的内存变量一个锁住,另一个在获取锁,出现死锁问题。..
分类:
其他好文 时间:
2015-05-20 09:59:01
阅读次数:
149