未使用的 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 明确考虑到这些函数可能会由于缺乏资源而失败(EAGAIN
和 ENOMEM
错误代码),但 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()
)。
假设我有一个 mutex/condition 变量。我初始化(pthread_mutex_init/pthread_cond_init),但从不使用它们(没有锁操作,没有signal/wait)。
这些未使用的对象是否分配了它们占用的内存以外的其他资源?
(我对 linux 和 OSX 在这方面的行为感兴趣)
虽然 POSIX 明确考虑到这些函数可能会由于缺乏资源而失败(EAGAIN
和 ENOMEM
错误代码),但 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()
)。