我正在学习 pthread_mutex_lock
,发现 pthread_mutex_lock
最终会在 glibc(2.27 版)中调用宏 lll_futex_timed_wait()
,我下载了 glibc 源代码,但显示 {{1} } 被定义为lll_futex_timed_wait()
,这是什么意思,如何得到它的真正定义(应该是系统调用,我也得到了linux内核的源码)?
-ENOSYS
答案 0 :(得分:2)
glibc 的一大块由 sysdeps
子树下的系统和架构相关位组成。您正在查看的是一个通用存根,只有在未针对特定平台构建正确配置 glibc 时才会编译该存根。
在那些较旧的 glibc 版本中,底层 futex 细节的实际实现将驻留在 sysdeps/unix/sysv/linux/lowlevellock-futex.h 中
有趣的是,在最近的 glibc 版本中,代码被提升到“通用”树,因此,例如,如果您检查 glibc 2.32,您会看到这个宏在系统调用方面正确实现。