将pthread_mutex_t和pthread_cond_t作为类成员静态变量的任何不利之处?

时间:2015-01-21 20:27:42

标签: c++ linux multithreading

将pthread_mutex_t和pthread_cond_t作为类成员静态变量的任何不利之处?

 class myclass {
        public:
          static void*  sometrdfn(void*);
          static std::string newVal;
          static  a_namespace::someclass* ptr;
          static pthread_mutex_t lock;
          static pthread_cond_t cond;
    };

std::string myclass::newVal = " Text";
a_namespace::someclass* myclass::ptr = NULL;
pthread_mutex_t myclass::lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t myclass::cond = PTHREAD_COND_INITIALIZER;


    void* myclass::sometrdfn(void* This) {
      pthread_mutex_lock(&lock);
      pthread_cond_wait(&cond);
      pthread_mutex_unlock(&lock);
    }

我在这里没有遇到任何问题,到目前为止一切都很有效,但我担心我可能会遇到一些问题?有人可以对此进行评估并建议我进行一些价值修改吗?由于我是多线程的新手,我将非常感谢一个详细而生动的答案。谢谢:))

2 个答案:

答案 0 :(得分:1)

这里没问题。 myclass的每个实例共享相同的互斥锁(lock和cond)。因此,每次实例调用sometrdfn时,它都会查看当前的所有实例共享的互斥锁状态。

答案 1 :(得分:1)

您应该使用lock初始化PTHREAD_MUTEX_INITIALIZER,使用cond初始化PTHREAD_COND_INITIALIZER。但如果你真的可以,你应该使用std::mutexstd::conditional_variable