c ++伪代码类:
具有成员变量的简单类,以及用于控制对其的访问的互斥锁。
我很好奇管理数据及其访问权限的专业人士和管理人员。 在多线程环境中,使用该方法访问和锁定cbMethodA()中的成员互斥是错误的吗?
我见过直接访问成员的示例,这样做似乎不正确。由于某种原因,该类通过公共方法公开访问。 此外,取消引用互斥锁然后锁定它似乎不是最佳做法。任何意见? 感谢
class A
{
public:
A():val(0);
~A();
int getVal(void);
static void cbMethodA();
static void cbMethodB();
private:
Mutex m_mutex;
int val;
}
int A::getVal(){
{
int returnVal = 0;
lockMutex(m_mutex);
returnVal = m_val;
unlock(mutex);
return returnVal;
}
void A::cbMethodA(void *ptr)
{
A* ptr = static_cast<A*> (ptr);
//get val
lockMutex(ptr->m_mutex);
//read val
int tempVal = ptr->m_val;
unlockMutex(ptr->m_mutex);
//do something with data
}
void A::cbMethodB(void *ptr)
{
A* ptr = static_cast<A*> (ptr);
//get val
int tempVal = ptr->getVal();
//process val....
}
答案 0 :(得分:2)
这似乎是直接应用SPOT( S ingle P oint O f T ruth),又名DRY( D on R epeat Y 我们自己),single important idea的两个名字。您已经创建了一个访问val
的函数,该函数执行一些应该始终伴随访问的任务。除非有一些私有的,特定于实现的原因直接访问成员字段,否则您应该使用您定义的getter方法。这样,如果您更改保护val
的同步机制,则只需更新一段代码。
我想不出为什么“解除引用互斥锁来锁定它”的任何原因都是坏的事情,重复自己 是一件坏事。