(转载于breaksoftware的csdn博客)之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得,我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦。那么本文就介绍几个例子,它们会在线程明显的位置死锁掉。 ...
分类:
编程语言 时间:
2015-02-02 22:47:28
阅读次数:
292
(转载于breaksoftware的csdn博客)我们回顾下之前举得例子caseDLL_PROCESS_ATTACH:{printf("DLLDllWithoutDisableThreadLibraryCalls_A:\tProcessattach(tid=%d)\n",tid);HANDLEhTh...
分类:
编程语言 时间:
2015-02-02 22:45:59
阅读次数:
279
(转载于breaksoftware的csdn博客)不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方(注意这儿是提供给我们的,而实际有比这个还要靠前的ma...
分类:
系统相关 时间:
2015-02-02 22:43:04
阅读次数:
268
(转载于breaksoftware的csdn博客)本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。 1 g 让程序运行起来 2 ctrl+break 中断程序 3 ~ 查看...
分类:
其他好文 时间:
2015-02-02 22:40:18
阅读次数:
189
在MySQL中尽量少使用UPDATE ...WHERE ...ORDER BY ...LIMIT语句,原因是MySQL会对where条件匹配的所有记录加上X锁,如果多个线程同事执行这条语句,就会有非常大的概率发生死锁,而且MySQL服务器不能自动的去解除这种死锁。
下面的例子证实了这一点,先创建一张record表,再插入几条记录
mysql> create table record(...
分类:
其他好文 时间:
2015-01-31 14:51:28
阅读次数:
145
摘自:http://sqcjy111.iteye.com/blog/1183928查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name,...
分类:
数据库 时间:
2015-01-29 17:31:46
阅读次数:
123
SELECT DBT.DATABASE_ID,
DB_NAME(DBT.DATABASE_ID) '数据库名',
DBT.TRANSACTION_ID,
AT.NAME,
AT.TRANSACTION_BEGIN_TIME,
CASE AT.TRANSACTION_TYPE
...
分类:
数据库 时间:
2015-01-29 10:32:56
阅读次数:
268
http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁。那如果在事情出现之前发现了这类潜在的风险岂不是更好? 那么我们来看一个简单的例子,如代码清单1所示。 1: SELECT * 2...
分类:
数据库 时间:
2015-01-28 12:58:27
阅读次数:
222
手动修改某表的记录,弹出以下错误:
然后尝试用PL/SQL语句修改记录,十多分钟过去了,一直显示正在执行;
结论:死锁了!!
查看被锁对象:
SELECT l.session_id sid,
s.serial#,
l.locked_mode 锁模式,
l.oracle_username 登录用户,...
分类:
数据库 时间:
2015-01-27 13:31:09
阅读次数:
161
java线程转储java的线程转储可以被定义为JVM中在某一个给定的时刻运行的所有线程的快照。一个线程转储可能包含一个单独的线程或者多个线程。在多线程环境中,比如J2EE应用服务器,将会有许多线程和线程组。每一个线程都有它自己的调用堆栈,在一个给定时刻,表现为一个独立功能。线程转储将会提供JVM中所...
分类:
编程语言 时间:
2015-01-27 12:43:21
阅读次数:
482