gpt4 book ai didi

c - 为什么当多个 pthread 竞争互斥锁时 PTHREAD_MUTEX_ADAPTIVE_NP 表现得像 PTHREAD_MUTEX_TIMED_NP

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:05 25 4
gpt4 key购买 nike

程序创建了一个 PTHREAD_MUTEX_ADAPTIVE_NP 互斥体,现在线程 A 获得了锁。当线程 A 给它时,三个线程(B、C、D)竞争这个锁。我想知道的是,为什么等待时间最长的线程总是先得到这个锁,然后等待时间第二长的线程......等等。

我认为 PTHREAD_MUTEX_ADAPTIVE_NP 就像 pthread_spinlock 就像 Kaz Sir 在 What is PTHREAD_MUTEX_ADAPTIVE_NP 中的回答一样:该方法也不适合公平性很重要的情况:它是机会锁。

最佳答案

你的基本想法是正确的。但是,自适应互斥体只会在很短的时间内忙转(最多调用 100 次 PAUSE 指令的循环)。一旦它进入内核 sleep 阶段,它就会再次表现得像一个普通的互斥体。

这是因为自适应互斥体适用于非常短、竞争非常激烈的锁定部分,因此 100 次循环自旋很有可能导致锁定可用。

因此,考虑到您的第二个长 sleep 调用,您所有的锁都在内核中 sleep ,而 busyspin 逻辑是无关紧要的。

您可以查看自适应互斥锁的实现 here for pthread_mutex_lock.c .如果 busy-spin 无法获取锁,nptl 会回退到 futex 锁,我认为这至少是一个确定性的顺序。

关于c - 为什么当多个 pthread 竞争互斥锁时 PTHREAD_MUTEX_ADAPTIVE_NP 表现得像 PTHREAD_MUTEX_TIMED_NP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49596353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com