C ++ Mac OS X pthread初始化

时间:2016-11-05 00:39:59

标签: c++ pthreads mutex

我在涉及Clang的Mac OS X 10.12上遇到错误,并且它不想编译我的代码。我希望它通过编译器进行编译,但是在调用pthread_mutex_init时,它仍然存在“错误:成员初始化程序'pthread_mutex_init'没有命名非静态数据成员或基类”。我已经尝试在pthread_mutex_t声明前添加和删除“static”,我已经包含了我的pthread头文件

编辑:是的,我在file.cpp文件中包含了file.h。 编辑#2:我尝试了mutex_ =(mutex_pthread_t)PTHREAD_MUTEX_INITIALIZER,它给出了一些奇怪的错误,告诉我在某处插入“{”。

这是我的代码:

Name~Job~City~State
Jim~Manager~New York~NY
Fred~Clerk~Philadelphia~PA
Rhonda~Associate~Tampa~FL

1 个答案:

答案 0 :(得分:1)

我假设您希望在所有Memory对象中共享一个互斥锁?

以下是2种(多种)方式,副作用略有不同:

#include <pthread.h>
class Memory {

  // I am assuming that you wanted the mutex to be initialised
  // at program start?

  static bool init_mutex();

  static pthread_mutex_t mutex_;
  static bool initialised;
};

bool Memory::initialised = init_mutex();

bool Memory::init_mutex()
{
  pthread_mutex_init(&mutex_, 0);
  return true;
}


// or what about upon first use of a Memory?

class Memory2
{
  struct impl {
    impl() {
      pthread_mutex_init(&mutex_, 0);
    }

    pthread_mutex_t mutex_;
  };

  static impl& get_impl()
  {
    static impl impl_;
    return impl_;
  }

  Memory2()
  {
    get_impl();
  }
};