等待互斥锁的线程如何重新运行?

时间:2017-02-21 11:13:21

标签: c multithreading pthreads mutex wait

上下文是这样的:

  • 线程试图锁定已锁定的互斥锁
  • 线程进入睡眠/阻止状态
  • 一段时间后,互斥锁被解锁

Q1)那会发生什么?

线程会立即恢复运行吗?或者内核仍会等待正在运行的线程消耗其时间片并正常调度等待线程?

Q2)如果互斥锁没有永久解锁怎么办?内核如何确定让线程等待?

1 个答案:

答案 0 :(得分:1)

  

线程会立即恢复运行吗?或者内核仍会等待正在运行的线程消耗其时间片并正常调度等待线程?

通常,线程现在可以运行了。在大多数系统上,如果有可用核心,它将立即开始运行。如果没有,那么下次在任何核心上调用调度程序时都会考虑它。

  

如果互斥锁没有永久解锁怎么办?内核如何确定让线程等待?

通常,线程在唤醒时所做的第一件事是尝试锁定互斥锁。如果失败,它会再次阻塞。某些实现在将互斥锁准备好运行之前将其分配给特定线程,在这种情况下,线程会使用互斥锁唤醒。

实施方式各不相同,可能会做出符合要求的任何事情。