C++ pseudocode class:Является ли блокировка разыменованных мьютексов плохим поведением?
Простой класс, который имеет переменную-член и мьютекс для контроля доступа к нему.
Мне любопытно, что у профессионалов и разработчиков управление данными и их доступ. В многопоточном окружении неверно использовать подход к доступу и блокировке мьютекса элемента в 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....
}
Какую реализацию мьютекса вы планируете использовать? Ответ на этот вопрос позволил бы дать более окончательный ответ. Мьютекс используется для защиты критического раздела кода, который может включать доступ к совместно используемому ресурсу или к некоторым общим переменным. –
Спасибо Тим. Я ничего не внедряю, просто читаю код в Интернете, и мне было любопытно, когда я видел, как попали прямые члены, поскольку я всегда писал код для использования get/set. Я не был уверен, что мне не хватает какой-то причуды из-за статического метода или нет. – ianhobo