并发编程中,如何区分临界区、阻塞、非阻塞、死锁、饥饿和活锁?

2026-05-06 06:320阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1415个文字,预计阅读时间需要6分钟。

并发编程中,如何区分临界区、阻塞、非阻塞、死锁、饥饿和活锁?

本文简要介绍并发编程中的基本概念,并参考《并发编程专题》一书,介绍一些相关概念,如并发与并行、同步与异步、锁与信号量等。

本文介绍并发编程中的若干概念,实际上在笔者之前的文章中,已经介绍过很多概念。比如:并发与并行、同步与异步、锁与信号量等等。参考《并发编程专栏》,本文计息介绍一些相对深入一些的概念

一、临界区

为了方便大家理解,我们先看下面的这样一张图,我们可以把房子看作一个进程,每个房子里面的住户及其活动看作一个线程,饮水机、健身器材、厕所都属于共享资源。这里的共享资源实际就是临界区的概念,临界区的资源在同一时间只能被一个线程(住户)使用,所以一旦临界资源被占用,其他的线程(住户)能做的就只有等待。

比如,在一个出租房内,住户A占用了厕所,在他使用厕所的这段时间内厕所这个资源就是他独占的。如果住户B此时也想上厕所,就只能等待住户A上完厕所之后才可以继续使用该资源。

二、阻塞和非阻塞

了解了临界区的概念之后,阻塞概念就好理解了。一个线程先占用了临界区的资源,此时如果其他的线程想使用临界区资源就必须等待。这种占用临界区资源,阻塞其他线程继续执行的情况就是线程阻塞(Blocking)。

然而说到非阻塞,一般说的就是是否对当前线程自己产生阻塞,比如:

  • 我执行一个任务,比如使用饮水机接水。我拿了一个杯子接水,而我必须在饮水机前面等着水接完,这种就是阻塞式线程。
  • 如果我拿了杯子接水,把杯子放到饮水机下面,饮水机会在杯子接满水之后,自动对我发出异步通知(比如声音告警)。
阅读全文

本文共计1415个文字,预计阅读时间需要6分钟。

并发编程中,如何区分临界区、阻塞、非阻塞、死锁、饥饿和活锁?

本文简要介绍并发编程中的基本概念,并参考《并发编程专题》一书,介绍一些相关概念,如并发与并行、同步与异步、锁与信号量等。

本文介绍并发编程中的若干概念,实际上在笔者之前的文章中,已经介绍过很多概念。比如:并发与并行、同步与异步、锁与信号量等等。参考《并发编程专栏》,本文计息介绍一些相对深入一些的概念

一、临界区

为了方便大家理解,我们先看下面的这样一张图,我们可以把房子看作一个进程,每个房子里面的住户及其活动看作一个线程,饮水机、健身器材、厕所都属于共享资源。这里的共享资源实际就是临界区的概念,临界区的资源在同一时间只能被一个线程(住户)使用,所以一旦临界资源被占用,其他的线程(住户)能做的就只有等待。

比如,在一个出租房内,住户A占用了厕所,在他使用厕所的这段时间内厕所这个资源就是他独占的。如果住户B此时也想上厕所,就只能等待住户A上完厕所之后才可以继续使用该资源。

二、阻塞和非阻塞

了解了临界区的概念之后,阻塞概念就好理解了。一个线程先占用了临界区的资源,此时如果其他的线程想使用临界区资源就必须等待。这种占用临界区资源,阻塞其他线程继续执行的情况就是线程阻塞(Blocking)。

然而说到非阻塞,一般说的就是是否对当前线程自己产生阻塞,比如:

  • 我执行一个任务,比如使用饮水机接水。我拿了一个杯子接水,而我必须在饮水机前面等着水接完,这种就是阻塞式线程。
  • 如果我拿了杯子接水,把杯子放到饮水机下面,饮水机会在杯子接满水之后,自动对我发出异步通知(比如声音告警)。
阅读全文