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

时间:2018-06-16 13:12:40

标签: operating-system mutex semaphore

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

主题A

  1. MutexAcquire()
  2. ++ VAR
  3. MutexRelease()
  4. 主题B

    1. MutexAcquire()
    2. ++ VAR
    3. MutexRelease()
    4. 以下情况会发生什么,

      1. 线程A执行MutexAcquire()
      2. OS将上下文切换到线程B
      3. 现在,线程B一直在等待线程A释放互斥锁。但是线程A由操作系统切换出来。
      4. 这不是典型的DeadLock问题吗?如何在现代计算机中解决这种情况。谁确保操作系统在完成释放Mutex之前不会切换线程A?

1 个答案:

答案 0 :(得分:0)

不,它不会。线程B将在某些时候由OS切换,线程A将能够释放互斥锁。

在实践中,您不需要等待线程B被切换,因为它将愿意并明确地暂停其执行。如果您想知道在现代操作系统中如何完成此操作,您可以在Software Engineering上查看我的答案。