Hej,
jedna z moich klas, do której dobieram się w dwóch wątkach, posiada kontener std::set.
Do tego kontenera wkładam różne elementy, równolegle się dzieje iteracja tego kontenera.
Przed każdą iteracją daję mutex.lock() a po iteracji mutex.unlock().
Przy dodawaniu elementów robię identycznie.
Lecz, w debugerze, a co za tym idzie w końcowym efekcie nie ma elementów.
Z punktu widzenia wątku który iteruje, kontener jest pusty, z punktu widzenia metody dodającej elementy, zawiera 220 elementów.
Co robię nie tak?
Metoda iterująca:
void Engine::QueueFrame()
{
mRenderableObjectsMutex.lock();
for( auto& object : mRenderableObjects )
{
Render( *object );
}
mRenderableObjectsMutex.unlock();
SDL_RenderPresent( mScreenBuffor.GetRenderer() );
++mFrameCount;
}
Metoda dodająca (wykonywana w pętli):
void Engine::AddObject( ObjectNodeContent* node )
{
mRenderableObjectsMutex.lock();
mRenderableObjects.insert( node );
mRenderableObjectsMutex.unlock();
}
Używam MSVC: Visual Studio 2013 Ultimate.