上下文如下:
线程试图锁定已锁定的互斥锁
线程进入休眠/阻塞状态
一段时间后,互斥锁被解锁
问题1)然后会发生什么?
线程会立即恢复运行吗?或者内核仍然会等待正在运行的线程使用它的时间片并正常调度等待的线程?
Q2)如果互斥锁没有永远解锁呢?内核如何决定让线程保持等待状态?

最佳答案

线程会立即恢复运行吗?或者内核仍然会等待正在运行的线程使用它的时间片并正常调度等待的线程?
通常线程现在可以运行了。在大多数系统中,如果有可用的内核,它将立即开始运行。如果没有,那么下次在任何核心上调用调度程序时将考虑它。
如果互斥锁不是永远解锁呢?内核如何决定让线程保持等待状态?
通常,线程在唤醒时所做的第一件事是尝试锁定互斥锁。如果失败了,它会再次阻塞。有些实现在特定线程准备运行之前将互斥对象分配给该线程,在这种情况下,该线程将使用互斥对象唤醒。
实现各不相同,可以做任何符合要求的事情。

07-28 02:56
查看更多