我正在阅读 libc++
call_once
的源代码,并对共享互斥锁的用法感到好奇。这是mutex.cpp
里面的实现。这是否意味着 call_once(f1)
和 call_once(f2)
竞争相同的互斥锁,即使它们是不同的函数。谢谢。
#ifndef _LIBCPP_HAS_NO_THREADS
_LIBCPP_SAFE_STATIC static __libcpp_mutex_t mut = _LIBCPP_MUTEX_INITIALIZER;
_LIBCPP_SAFE_STATIC static __libcpp_condvar_t cv = _LIBCPP_CONDVAR_INITIALIZER;
#endif
void __call_once(volatile once_flag::_State_type& flag, void* arg,
void (*func)(void*)) {
__libcpp_mutex_lock(&mut);
...
}
我希望有人能澄清这是否是故意的,如果是这样,背后的原因是什么。