Quantcast
Channel: GameDev.net
Viewing all articles
Browse latest Browse all 17063

C++ Multi-Thread Queue Processing

$
0
0

Hi,

I want to remove objects off Queue1, Process, move results to Queue2 

In a Multi-Threaded fashion, but my code is Deadlocking:

// Threaded Function
m_threadedFunct = [this]() {
	while (m_threadsRunning) {

		// Wait
		{
			unique_lock<mutex> lock(m_mutexMain);
					
			while (m_objsToProcess == 0) m_mutexMainCondition.wait(lock);
		}

		// Objs to Process
		shared_ptr<Object> obj;
					
		{
			unique_lock<mutex> lock(m_mutex1);

			if (m_queue1.size() > 0) {
				obj = m_queue1.back();
				m_queue1.pop_back();
			}
		}

		// Process obj
		if (obj) {

			shared_ptr<Data> data(process(obj));

			// Store
			{
				unique_lock<mutex> lock(m_mutex2);

				m_queue2[obj] = data;
			}
	
			// Notify Main Thread
			{
				unique_lock<mutex> lock(m_mutexMain);

				--m_objsToProcess;

				if (m_objsToProcess == 0) m_mutexMainCondition.notify_all();
			}
		}
	}
	
};


// Start Threads
for (unsigned int i(0); i < 4; i++) m_threads.emplace_back(thread(m_threadedFunct));
			

// Main
m_queue1 …

Viewing all articles
Browse latest Browse all 17063

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>