如果共享访问某些库中的代码,多个线程中的数据受全局互斥锁保护,并且当第一次获取互斥锁时我们需要调用pthread_mutex_init,但如果多个线程尝试同时调用库函数,那么我们需要确保pthread_mutex_init只被一个线程调用一次。
我们怎样才能做到这一点?库构造函数/析构函数是一种解决方案,但库必须支持所有编译器/平台。我们可以使用counter并使用atomic inc / dec但是每次锁定/解锁时的原子++ / - 操作都很昂贵。我正在寻找任何其他方式。所有评论将不胜感激。
答案 0 :(得分:3)
你有两个不错的选择:
使用PTHREAD_MUTEX_INITIALIZER
静态初始化互斥锁。
使用pthread_once
和静态初始化pthread_once_t
来确保互斥锁初始化一次。