CPU 信号量使用期间的上下文切换是否会造成死锁?

Will CPU context switching during semaphore usage create a deadlock?

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

线程 A

  1. MutexAcquire()
  2. ++变量
  3. MutexRelease()

线程 B

  1. MutexAcquire()
  2. ++变量
  3. MutexRelease()

以下情况会发生什么,

  1. 线程A执行MutexAcquire()
  2. OS 将上下文切换到线程 B
  3. 现在线程B一直在等待线程A释放Mutex。但是线程 A 被 OS 切换出去了。

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

不,不会。线程 B 将在某个时刻被 OS 切换出去,线程 A 将能够释放互斥量。

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

上的回答