提问人:curiousguy 提问时间:12/2/2019 最后编辑:curiousguy 更新时间:12/5/2019 访问量:68
lock(mutex) 实现通常尝试确定互斥锁被锁定了多长时间以及锁定在哪个内核上吗?如果不是,为什么不呢?
Do lock(mutex) implementations usually try to determine for how long a mutex was locked and on which core? If not, why not?
问:
当互斥锁的锁定(或try_lock)函数发现互斥锁已经被锁定(可能被另一个线程锁定)时,它是否可以尝试确定拥有的线程是否(或最近)在另一个内核上运行?
知道所有者是否正在运行可以指示线程仍然持有锁的可能原因(为什么它无法解锁它):如果拥有互斥锁的线程是“可运行”的(等待可用的核心和时间片)或“休眠”或等待 I/O...那么显然在互斥锁上旋转是没有用的。
我知道非递归、非“安全”、非优先级继承互斥锁(我称之为“匿名”互斥锁:实际上可以由另一个线程解锁的互斥锁,因为它们只是普通信号量)携带尽可能少的信息,但可以肯定的是,对于那些知道锁定线程标识的“拥有”互斥锁来说,这可以确定。
另一个更有用的信息是它被锁定了多少时间,但这可能需要在互斥对象中添加一个字段。
有没有这样做过?
答: 暂无答案
评论