Code:
void testLP::Print(std::string* pBuf)
{
char szTemp[MJMAXSTRBUF];
sprintf(szTemp, "%s=", GetTerm().data());
(*pBuf) += szTemp;
testStringArray::iterator itLeaf;
for (itLeaf=m_patterns.begin(); itLeaf!=m_patterns.end(); ++itLeaf)
{
if (itLeaf!=m_patterns.begin())
(*pBuf) += "|";
sprintf(szTemp, "%s", itLeaf->data());
(*pBuf) += szTemp;
}
(*pBuf) += "\n";
}
Ovaj kod koji si napisala nije thread safe a to nema veze ni sa kompajlerom niti sa bilo cime drugim.
Naime, koliko vidim tu se koriste sleddece promenljive koje nisu lokalne za tvoju metodu testLP:
1. pBuf
2. m_patterns
zatim metoda GetTerm() takodje vraca nesto sto je pretpostavljam std::string. Po svoj prilici ni ona ti nije thread safe.
Za pocetak prodji kroz kod i guarduj sve delove koda koji mogu da budu koristeni iz vise threadova, nekim synchro objektima.
pozdrav
Mipko