【问题标题】:Can a thread be preempt while holding a pthread lock?持有 pthread 锁的线程可以抢占吗?
【发布时间】:2018-09-06 17:46:16
【问题描述】:

当一个pthread持有一个锁(mutex or rwlock or spinlock)时,它可以被抢占吗? 我看了内核代码,当持有内核锁时,它不能被抢占,是吗?

【问题讨论】:

  • 关于锁的问题是在内核代码中还是在用户空间代码中? “pthread lock”是一个用户空间锁,所以你读到的关于Linux内核的任何内容都不适用于它。
  • 是的,pthread 锁是用户空间锁。

标签: linux kernel posix


【解决方案1】:

当一个 pthread 持有一个锁(mutex 或 rwlock 或 spinlock)时,它可以被抢占吗? 不,它不能在 非抢占内核的情况下被抢占 .

抢占式内核的情况下,强制进程切换如果有任何高优先级作业来了,并且在内核模式下运行的进程可以在中间被另一个进程替换,则会发生强制进程切换核函数。

【讨论】:

  • 谢谢。如果没有高优先级的进程,可以被另一个pthread抢占吗?
  • 假设一个进程作业是执行异常处理程序&分配给该进程的时间已过期但作业未完成,在这种情况下,如果您的内核是preemptive,那么该进程将立即替换为其他。如果您的内核是nonpreemptive,那么该进程将继续运行直到作业完成,或者它可以自愿放弃 CPU。
  • 是说用户空间锁不会修改内核中线程的preempt_count,所以线程可以被抢占?
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多