如果对某个库中的代码、多个线程之间的代码的共享访问受全局互斥锁保护,并且当第一次获取互斥锁时,我们需要调用pthread_mutex_init,但是如果多个线程试图同时调用库函数,则我们需要确保pthread_mutex_init只被一个线程调用一次。
我们如何才能做到这一点?库构造函数/析构函数是一种解决方案,但库必须支持所有编译器/平台。我们可以使用counter和atomic inc/dec,但是每个锁/解锁的atomic++/--操作都很昂贵。我在找别的办法。所有意见将不胜感激。
最佳答案
你有两个好的选择:
使用PTHREAD_MUTEX_INITIALIZER
静态初始化互斥锁。
使用pthread_once
和静态初始化pthread_once_t
确保互斥锁初始化一次。