У меня есть сервер, прослушивающий порт для запроса.Когда приходит запрос, он отправляется в одноэлементный класс Singleton
.Этот класс Singleton
имеет структуру данных RootData
.<pre>
class Singleton {
void process();
void refresh();</p>
<p>private:
RootData mRootData;
}
В классе есть две функции: process
: работать с mRootData для некоторой обработки и refresh
: периодически вызываться из другого потока, чтобы обновить mRootData с последними изменениями.из базы данных.
Mutex требует доступа к mRootData
.
У меня есть следующие вопросы:
1] Если класс одиночный и mRootData находится внутри этого класса, действительно ли необходим Mutex gaurd?Я знаю, что это необходимо для конфликта между обновлением / процессом.Но с сервера я думаю, что в любой момент времени будет происходить только один вызов процесса (потому что класс - Singleton). Пожалуйста, исправьте меня, если мое понимание неверно.
2] Должен ли я защищать i)структура данных ИЛИ ii) функция доступа к структуре данных.Например,
i) <code> const RootData& GetRootData()
{
ACE_Read_Guard guard(m_oMutexReadWriteLock);
return mRootData;
// Mutex is released when this function returns
}
// Similarly Write lock for SetRootData()
</code>
ii) <code>void process()
{
ACE_Read_Guard guard(m_oMutexReadWriteLock);
// use mRootData and do processing
// GetRootData() and SetRootData() wont be mutex protected.
// Mutex is released when this function returns
}
</code>
3] Если ответ на вопрос выше: i) я должен вернуться по ссылке или по объекту?Пожалуйста, объясните в любом случае.
Заранее спасибо.