Zawartość std::set jest widzialna tylko w jednym wątku.

0

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.

3

Na pewno korzystasz z tego samego obiektu?

W każdym razie: zamiast ręcznie wywoływać lock i unlock korzystaj z std::lock_guard http://en.cppreference.com/w/cpp/thread/lock_guard

1 użytkowników online, w tym zalogowanych: 0, gości: 1