未使用的 pthread 互斥锁或条件变量分配哪些资源?

What resources do an unused pthread mutex or condition variable allocate?

假设我有一个 mutex/condition 变量。我初始化(pthread_mutex_init/pthread_cond_init),但从不使用它们(没有锁操作,没有signal/wait)。

这些未使用的对象是否分配了它们占用的内存以外的其他资源?

(我对 linux 和 OSX 在这方面的行为感兴趣)

虽然 POSIX 明确考虑到这些函数可能会由于缺乏资源而失败(EAGAINENOMEM 错误代码),但 Linux glibc 和OSX pthread_mutex_init()pthread_cond_init() 的实现分配任何资源。直接查看源码就可以看到:

pthread_mutex_init() 的 Linux glibc 实现在 nptl/pthread_mutex_init.c 中(参见函数 __pthread_mutex_init())。

pthread_cond_init() 的 Linux glibc 实现在 nptl/pthread_cond_init.c 中(参见函数 __pthread_cond_init())。

pthread_mutex_init()的OSX实现在libpthread/pthread_mutex.c (see the functions pthread_mutex_init() and _pthread_mutex_init()) and libpthread/internal.h中(见宏_PTHREAD_LOCK_INIT)。

pthread_cond_init() 的 OSX 实现在 libpthread/pthread_cond.c 中(参见函数 pthread_cond_init()_pthread_cond_init())。