Próbuję napisać prosty wielowątkowy serwer, który będzie... coś tam, coś tam... nie ważne. Nadmienię, iż nie mam zbytniego doświadczenia z programowaniem wielowątkowym. I w pewnym punkcie tego programu wymyśliłem sobie coś na kształt:
class Command
{
private:
int m_iNumber;
int m_iLevel;
(...)
friend class CommandMap;
};
class CommandMap
{
private:
map<string, Command> m_commandMap;
(...)
public:
int checkCommand(int iLevel, string sCmd);
(...)
friend class Command;
};
(...)
int CommandMap::checkCommand(int iLevel, string sCmd) //tutaj może referencje
{
map<string, Command>::iterator it;
it = this->m_commandMap.find(sCmd);
if(it != map::end)
if(it->second.m_iLevel == iLevel)
return it->second.iNumber;
return -1;
}
(...)
CommandMap myProtocol;
(...)
//gdzieś w funkcji wątku
iCurrentNumber = myProtocol.checkCommand(iCurrentLevel, sCurrentCommand);
A więc istnieje globalny obiekt klasy CommandMap, który chciałbym, aby reprezentował możliwe do wykonania komendy na poszczególnych etapach połączenia. Teraz powiedzmy, że gdzieś w wątku będą się pojawiały wywołania funkcji tego obiektu, której zadaniem będzie sprawdzenie poprawności otrzymanego polecenia. Stan obiektu nie będzie zmieniany - zadaniem będzie wyłącznie dokonanie sprawdzenia!
I teraz mam pytanie:
Czy takie wywołania będą "bezpieczne"? Czy też może się wątki mogą wzajemnie zakłócać zwracane wyniki? Powinienem użyć jakiś mechanizmów zabezpieczających (blokujących) - czy w tej sytuacji nie jest to konieczne?
Nie do końca wiem jak domyślnie zachowuje się system przy takich wywołaniach: czy tworzy kopię funkcji dla każdego wywołania, czy kolejkuje te wywołania, czy też możliwe są nadpisania parametrów funkcji i nieprzewidywalne wyniki...
Zdaje sobie sprawę, że to pytanie jest jakieś takie... no ale cóż.
Pozdrawiam i z góry dzięki za pomoc