以原子方式调用pthread_mutex_init

时间:2014-02-23 12:23:11

标签: linux multithreading gcc operating-system posix

如果共享访问某些库中的代码,多个线程中的数据受全局互斥锁保护,并且当第一次获取互斥锁时我们需要调用pthread_mutex_init,但如果多个线程尝试同时调用库函数,那么我们需要确保pthread_mutex_init只被一个线程调用一次。

我们怎样才能做到这一点?库构造函数/析构函数是一种解决方案,但库必须支持所有编译器/平台。我们可以使用counter并使用atomic inc / dec但是每次锁定/解锁时的原子++ / - 操作都很昂贵。我正在寻找任何其他方式。所有评论将不胜感激。

1 个答案:

答案 0 :(得分:3)

你有两个不错的选择:

  1. 使用PTHREAD_MUTEX_INITIALIZER静态初始化互斥锁。

  2. 使用pthread_once和静态初始化pthread_once_t来确保互斥锁初始化一次。