CPU 信号量使用期间的上下文切换是否会造成死锁?
Will CPU context switching during semaphore usage create a deadlock?
鉴于这两个线程试图更新全局变量 'var'。
线程 A
- MutexAcquire()
- ++变量
- MutexRelease()
线程 B
- MutexAcquire()
- ++变量
- MutexRelease()
以下情况会发生什么,
- 线程A执行MutexAcquire()
- OS 将上下文切换到线程 B
- 现在线程B一直在等待线程A释放Mutex。但是线程 A 被 OS 切换出去了。
这不是经典的死锁问题吗?现代计算机如何解决这种情况。谁保证 OS 在释放 Mutex 之前不会切换线程 A?
不,不会。线程 B 将在某个时刻被 OS 切换出去,线程 A 将能够释放互斥量。
在实践中,您不需要等待线程 B 被关闭,因为它会自愿并明确地暂停其执行。如果您想知道这在现代 OSes 中究竟是如何完成的,您可以查看我在 Software Engineering.
上的回答
鉴于这两个线程试图更新全局变量 'var'。
线程 A
- MutexAcquire()
- ++变量
- MutexRelease()
线程 B
- MutexAcquire()
- ++变量
- MutexRelease()
以下情况会发生什么,
- 线程A执行MutexAcquire()
- OS 将上下文切换到线程 B
- 现在线程B一直在等待线程A释放Mutex。但是线程 A 被 OS 切换出去了。
这不是经典的死锁问题吗?现代计算机如何解决这种情况。谁保证 OS 在释放 Mutex 之前不会切换线程 A?
不,不会。线程 B 将在某个时刻被 OS 切换出去,线程 A 将能够释放互斥量。
在实践中,您不需要等待线程 B 被关闭,因为它会自愿并明确地暂停其执行。如果您想知道这在现代 OSes 中究竟是如何完成的,您可以查看我在 Software Engineering.
上的回答