将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);
}
我在这里没有遇到任何问题,到目前为止一切都很有效,但我担心我可能会遇到一些问题?有人可以对此进行评估并建议我进行一些价值修改吗?由于我是多线程的新手,我将非常感谢一个详细而生动的答案。谢谢:))
答案 0 :(得分:1)
这里没问题。 myclass
的每个实例共享相同的互斥锁(lock和cond)。因此,每次实例调用sometrdfn时,它都会查看当前的所有实例共享的互斥锁状态。
答案 1 :(得分:1)
您应该使用lock
初始化PTHREAD_MUTEX_INITIALIZER
,使用cond
初始化PTHREAD_COND_INITIALIZER
。但如果你真的可以,你应该使用std::mutex
和std::conditional_variable
。