并发编程中的活性问题

Posted 沛沛老爹

tags:

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

并发应用程序按照及时方式执行的能力称为活性/活跃度(liveness)。

活性一般包括三种类型的问题:死锁、饿死和活锁。

1.Deadlock-死锁

线程死锁是并发程序设计中可能遇到的主要问题之一。他是指程序运行中,多个线程竞争共享资源时可能出现的一种系统状态,每个线程都被阻塞,都不会结束,进入一种永久等待状态。

例如两个朋友A 和 B 鞠躬,都非常讲礼貌,礼貌的一个严格规则是, 当你向朋友鞠躬时,必须保持鞠躬状态,直到你的朋友向你还礼。

两个朋友可能同时向对方鞠躬,当朋友 A 和朋友 B 同时向对方鞠躬时,都在等待对方起身,进入阻塞状态。发生线程死锁。

2. starvation-饿死

饿死(starvation)描述这样的情况:一个线程不能获得对共享资源的常规访问,并且不能继续工作,当共享资源被贪婪线程长期占有而不可用时,就会发生这样的情况。

3.livelock-活锁

一个线程经常对另一个线程的操作作出响应,如果另一个线程的操作也对这个线程的操作作出响应,那么就可能导致活锁(livelock)。和死锁类似,发生活锁的线程不能进行进一步操作。但是,线程没有被锁定,它只是忙于相互响应,以致不能恢复工作。活锁可以比喻为两人在走廊中相遇。A避让的自己的左边让B通过,而B同时避让到自己的右边让A通过。发现他们仍然挡住了对方,A就避让到自己的右边,而B同时避让到了自己的左边,他们还是挡住了对方,所以就没完没了。

以上是关于并发编程中的活性问题的主要内容,如果未能解决你的问题,请参考以下文章

高并发编程必备基础 -- 转载自 并发编程网

并发编程中的三个问题

学了这么久的高并发编程,连Java中的并发原子类都不知道?

Java 并发编程 -- 并发编程线程基础(线程安全问题可见性问题synchronized / volatile 关键字CASUnsafe指令重排序伪共享Java锁的概述)

Java 并发编程 -- 并发编程线程基础(线程安全问题可见性问题synchronized / volatile 关键字CASUnsafe指令重排序伪共享Java锁的概述)

实战并发编程 - 02解决并发问题常用套路