一个linux上分析死锁的简单方法

一个linux上分析死锁的简单方法

ID:22764132

大小:217.79 KB

页数:9页

时间:2018-10-31

一个linux上分析死锁的简单方法_第1页
一个linux上分析死锁的简单方法_第2页
一个linux上分析死锁的简单方法_第3页
一个linux上分析死锁的简单方法_第4页
一个linux上分析死锁的简单方法_第5页
资源描述:

《一个linux上分析死锁的简单方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一个Linux上分析死锁的简单方法本义主要介绍一种在Linux上分析死锁问题的简平方法。主要介绍死锁的基本概念,以及如何使川pstack和gdb对死锁问题进行分析。简介死锁(deallocks):是指W个或W个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此吋称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。由于资源占用是互斥的,当某个进程提出申请资源后,使符有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生Y—种特殊现象死锁。一种

2、交叉持锁死锁的情形,此吋执行程序屮两个或多个线程发生永久堵塞(等待),每个线程都在等待被其它线程占用并堵塞了的资源。例如,如果线程1锁住了记录A并等待记录B,而线程2锁住;T记录B并等待记录A,这样两个线程就发生了死锁现象。在计算机系统屮,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。产生死锁的四个必要条件(1)互斥条件:一个资源每次只能被一个进程(线程)使用。(2)请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。(3)不剥夺条件:此进程(线程)已获得的资源,在末使用

3、完之前,不能强行剥夺。(4)循环等待条件:多个进程(线程)之间形成一种头尾相接的循环等待资源关系。1.交叉持锁的死锁示意图:子•超1子4雄2注释:在执行func2和func4之后,子线程1获得了锁A,正试图获得锁巳,但是子线程2此时获得了锁B,正试图获得锁A,所以子线程1和子线程2将没有办法得到锁A和锁B,因为它们各自被对方占有,永远不会释放,所以发生了死锁的现象。使用pstack和gdb工具对死锁程序进行分析pstack在Linux平台上的简单介绍pstack是Linux(比如RedHatLinux系统、UbuntuLinux系统等)F—个很宥用的工具,它

4、的功能是打印输出此进程的堆栈信息。可以输出所宥线程的调用关系栈。gdb在Linux平台上的简单介绍GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。Linux系统中包含了GNU调试程序gdb,它是一个用來调试C和C++程序的调试器。可以使程序幵发者在程序运行时观察程序的内部结构和内存的使用情况.gdb所提供的一些主耍功能如卜*所示:1运行程序,设置能影响程序运行的参数和环境;2控制程序在指定的条件下停止运行;3当程序停止时,可以检查程序的状态;4当程序crash时,可以检查core文件;5可以修改程序的错误,并重新运行程序;6可以动态监视程序屮

5、变量的值;7可以单步执行代码,观察程序的运行状态。gdb程序调试的对象足可执行文件或者进程,而不是程序的源代码文件。然而,并不是所有的可执行文件都可以用gdb调试。如果要让产生的可执行文件可以用来调试,需在执行g++(gcc)指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。gdb的基本命令较多,不做详细介绍,大家如果需要进一步了解,请参见gdb手册。清单1.测试程序#include#include

6、ad.h>#includepthreadjnutex_tmutexl=PTHREAD_MUTEX_INITIALIZER;pthread_mutex_tmutex2=PTHREAD_MUTEX_INITIALIZER;pthread_mutex_tmutex3=PTHREAD_MUTEX_INITIALIZER;pthread_mutex_tmutex4=PTHREAD_MUTEX_INITIALIZER;staticintsequencel=0;staticintsequence2=0;intfund(){pthread_mutex_l

7、ock(&mutex1);++sequence1;sleep(1);pthread_mutex_lock(&mutex2);++sequence2;pthread_mutex_unlock(&mutex2);pthread_mutex_unlock(&mutex1);returnsequencel;}intfunc2()pthread_mutex_lock(&mutex2);++sequence2;sleep(1);pthread_mutexIock(&mutex1);++sequence1;pthread_mutex_unlock(&mutex1);pth

8、read_mutex_unlock(&mutex2)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。