死锁的理解

Posted 积少成多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死锁的理解相关的知识,希望对你有一定的参考价值。

死锁是由于一系列线程竞争一些列资源产生的永久阻塞。导致死锁的有两种情况:

   1.自死锁(往往被忽略)

    一个线程在拥有某个资源的情况下又试图申请对该资源的使用,陷入到自死锁。

   2.另外一种情况是线程1用于资源A,线程2拥有资源B,这时候线程1申请资源B,线程2申请资源A,陷入了相互等待的境地,造成死锁。

 

===============

   map内部实现是依据红黑树的,查询的时间复杂度为log(n)。hash_map的内部实现是哈希表,查询的时间复杂度为n(1)。hash可以看成用空间复杂度换取了时间复杂度。

    在hash_map中,每个key都对应于一个桶,用来容纳value值。为了实现hash_map,我们需要定义哈希函数和等于比较函数。在没有提供这些函数的时候会用一个缺省的。

   有很重要的一点是hash_map需要定义的是等于函数,而map需要定义的是比较大小的函数,这样是和他们的特点相对应的,hash_map是基于哈希的思想,它只要看看置顶的键值有没有存在,用等于函数就可以实现。map是基于红黑树的,用比较函数比较大小。

================

    在面试题目中经常要让我们从一个数字序列中找出我们想要的一些信息,针对这样的题目,本人有如下重要总结,希望帮助大家:

    1.如果要处理的数字序列是一个无序的数列,那么尽量往快速排序上靠,用快速排序的思想解决此类问题。

    2.如果要处理的数字序列是一个有序的数列,那么尽量往二分查找上靠,用二分查找的思想解决此类问题。

以上是关于死锁的理解的主要内容,如果未能解决你的问题,请参考以下文章

「操作系统」深入理解死锁(什么是死锁?死锁形成条件?如何避免死锁?如何排查死锁?)

Java死锁的理解

操作系统死锁的理解

阿里一面,说说你对Mysql死锁的理解

对死锁的理解

这六个 MySQL 死锁案例,能让你理解死锁的原因!