【问题标题】:Will CPU context switching during semaphore usage create a deadlock?信号量使用期间的 CPU 上下文切换会造成死锁吗?
【发布时间】:2018-06-16 13:12:40
【问题描述】:

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

线程A

  1. MutexAcquire()
  2. ++var
  3. MutexRelease()

线程 B

  1. MutexAcquire()
  2. ++var
  3. MutexRelease()

接下来的场景会发生什么,

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

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

【问题讨论】:

    标签: operating-system mutex semaphore


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 2014-04-24
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2016-11-01
      相关资源
      最近更新 更多