我在哪里可以找到关于“自适应”pthread互斥锁的文档?在我的系统上定义了PTHREAD_MUTEX_ADAPTIVE_NP符号,但我在唯一能找到的文档中找不到有关自适应互斥锁是什么或何时适合使用的信息。
那么,它是什么,何时应该使用它呢?
供参考,我使用的libc版本是:
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10.5) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.50 system on 2013-09-30.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.
而且 "uname -a" 给出
Linux desktop 3.2.0-55-generic #85-Ubuntu SMP Wed Oct 2 12:29:27 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
sched_yield
进行忙等待呢?有什么原因吗? - Honglisched_yield
已经过时。Linux 大约15年前开发了 futexes。使用futex,我们可以使用原子操作(无需内核干预)来获取锁。如果失败,我们可以进入内核等待 futex(而不是执行没有等待任何东西的费时的sched_yield
调用)。我们还可以在 futex 上旋转:也就是,在调用 futex 等待操作之前,尝试多次执行原子操作。WebKit方法已经过时,基于过时的概念。 - Kazsched_yield
不会等待任何东西,但 WebKit 博客文章认为他们在sched_yield
上忙等以优化微争用情况:即关键部分很短的争用情况。如果sched_yield
的常数时间开销比 futex 系统调用小,那么在微争用情况下忙等sched_yield
几次是有益的,这对于优化来说是合理的。您同意这个观点吗?如果不是,那么您是否在说 futex 系统调用的常数开销非常低? - Honglifutex
时,您需要在锁定线程和解锁线程中都进行系统调用。而使用sched_yield
时,您只需要在锁定线程中进行一次系统调用。问题在于,sched_yield
是不可预测的,并且可能会因为调度程序对从一个核心迁移到另一个核心(在缓存传输时间方面)犹豫不决而给您带来不同的结果。 - user1143634