首页 > 解决方案 > 信号量使用期间的 CPU 上下文切换会造成死锁吗?

问题描述

鉴于这两个线程试图更新全局变量“var”。

线程 A

  1. 互斥获取()
  2. ++变量
  3. 互斥释放()

线程 B

  1. 互斥获取()
  2. ++变量
  3. 互斥释放()

在以下情况下会发生什么,

  1. 线程 A 执行 MutexAcquire()
  2. 操作系统将上下文切换到线程 B
  3. 现在线程 B 一直在等待线程 A 释放 Mutex。但是线程 A 被操作系统关闭。

这不是典型的死锁问题吗?现代计算机如何解决这种情况。谁确保操作系统在释放 Mutex 之前不会切换线程 A?

标签: operating-systemmutexsemaphore

解决方案


不,它不会。线程 B 将在某个时候被操作系统关闭,线程 A 将能够释放互斥锁。

在实践中,您不需要等待线程 B 被关闭,因为它会自愿且明确地暂停其执行。如果您想知道这在现代操作系统中究竟是如何完成的,您可以查看我在Software Engineering上的回答。


推荐阅读