简介

死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。

一种交叉持锁死锁的情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被其它线程占用并堵塞了的资源。例如,如果线程 1 锁住了记录 A 并等待记录 B,而线程 2 锁住了记录 B 并等待记录 A,这样两个线程就发生了死锁现象。在计算机系统中 , 如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。

回页首

产生死锁的四个必要条件

(1) 互斥条件:一个资源每次只能被一个进程(线程)使用。
(2) 请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件 : 此进程(线程)已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件 : 多个进程(线程)之间形成一种头尾相接的循环等待资源关系。

图 1. 交叉持锁的死锁示意图:

注释:在执行 func2 和 func4 之后,子线程 1 获得了锁 A,正试图获得锁 B,但是子线程 2 此时获得了锁 B,正试图获得锁 A,所以子线程 1 和子线程 2 将没有办法得到锁 A 和锁 B,因为它们各自被对方占有,永远不会释放,所以发生了死锁的现象。

转载于:https://blog.51cto.com/shaungqiran/1767929

linux 死锁介绍与简单分析相关推荐

  1. Linux系统调用getuid的简单分析

    陈铁 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000. Linux内核启 ...

  2. linux 内核 企鹅,Linux 内核 Makefile 体系简单分析

    众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile.在内核目录树中我们可以看到内核编译系统的顶层Makefile文件.但是如此复杂.庞大的内核源码绝不可能使用一个或 ...

  3. Linux·内核源码简单分析

    目录 系统总体流程: 各个目录的阅读总结: (一) boot (二)内核初始化init (三)kernel: (四)mm内存管理 (五)文件系统模块fs: 系统总体流程: 系统从boot开始动作,把内 ...

  4. 对魔兽世界、支付宝、Linux三类软件的简单分析

    软工第一次作业: 软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 这 ...

  5. arm平台下linux c语言编程,简单分析针对ARM平台的C语言程序的编译问题

    我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os.之前一直觉得既然是优化选项,顶多是优化一下逻辑,提高一些效率或者减少一下程序大小而已.很少会觉得它 ...

  6. Linux 系统 CPU 使用率简单分析

    CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示. CPU 使用率 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 ...

  7. linux 死锁分析

    简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  8. Linux桌面环境介绍以及优缺点分析

    1. KDE 桌面系统 KDE 是 K Desktop Environment 的缩写,中文译为"K桌面环境". KDE 是基于大名鼎鼎的 Qt 的,最初于 1996 年作为开源项 ...

  9. linux将程序锁死,Linux死锁现象及分析方法(转)

    本节我们对Linux死锁做一个基本的介绍,然后讲解如何检测并定位死锁. 1. 什么是死锁? 死锁(DeadLock)是指两个或者两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象 ...

最新文章

  1. 东北农业大学农学院程晓非教授荣获植物病毒学国家“优青”资助
  2. K项目轶事之开工第一天
  3. 澳大利亚科学家开发出可用于脑机接口的新型碳基生物传感器
  4. 数据库连接池技术,c3p0
  5. 关于 htonl 和 ntohl 的实现
  6. BGP MPLS中MCE技术介绍
  7. maven打包到本地库
  8. 【邀请函】2021钉钉宜搭·线上沙龙,邀您云上相见!
  9. android odex版本调试_Android可执行文件之谜 - DEX与ODEX, OAT与ELF
  10. Z-Stack Home Developer's Guide—3. The Home Automation Profile and the Sample Applications中文翻译
  11. Mysql学习总结(49)——从开发规范、选型、拆分到减压
  12. PyTorch nn.GRU 使用详解
  13. a = a + 1, a++, ++a ,a+=1区别在哪
  14. 在文件保存中 os.getcwd() os.listdir() os.makedirs() os.mkdir() xx.join() ... 等函数 的使用介绍...
  15. javascript 中==和===的区别
  16. 希捷DM002-500G固件问题解决方法
  17. java编程思想第4版 第五章习题
  18. android 标签开源控件,Android开源控件ViewPager Indicator的使用方法
  19. Android序列化之Parcel
  20. Android Studio:如何使用网格布局将整个界面等比分为三行三列

热门文章

  1. mysql查看连接数 (linux)
  2. CSS那些事笔记(一入门)
  3. 重要的mysql语句用法
  4. sql server 2005 T-SQL CAST 和 CONVERT (Transact-SQL)
  5. [Vue.js进阶]从源码角度剖析vue-router(三)
  6. 【转载】老鸟程序员总结的这些小技巧
  7. VMware vSphere 6.5 配置文档
  8. ios UIImage 圆形图片剪切方案
  9. 最小乘积生成树和最小乘积最大匹配
  10. memcached 缓存服务器