logic: Fixed concurrency issues in TaskGroupParallel causing scheduler freeze
This commit is contained in:
@@ -26,12 +26,11 @@ void TaskGroupParallel::doEnter(std::shared_ptr<Blackboard> blackboard)
|
|||||||
if (m_needsToStartThreads)
|
if (m_needsToStartThreads)
|
||||||
{
|
{
|
||||||
m_needsToStartThreads = false;
|
m_needsToStartThreads = false;
|
||||||
m_activeTaskCount = 0;
|
m_activeTaskCount = m_tasks.size();
|
||||||
for (size_t i = 0; i < m_tasks.size(); i++)
|
for (size_t i = 0; i < m_tasks.size(); i++)
|
||||||
{
|
{
|
||||||
m_tasks[i]->thread = std::make_shared<std::thread>(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard);
|
|
||||||
m_tasks[i]->active = true;
|
m_tasks[i]->active = true;
|
||||||
m_activeTaskCount++;
|
m_tasks[i]->thread = std::make_shared<std::thread>(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,10 +64,13 @@ void TaskGroupParallel::doReset(std::shared_ptr<Blackboard> blackboard)
|
|||||||
m_tasks[i]->taskRunner->reset();
|
m_tasks[i]->taskRunner->reset();
|
||||||
if (!m_tasks[i]->active)
|
if (!m_tasks[i]->active)
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_activeTaskCountMutex);
|
||||||
|
m_activeTaskCount++;
|
||||||
|
}
|
||||||
m_tasks[i]->thread->join();
|
m_tasks[i]->thread->join();
|
||||||
m_tasks[i]->thread = std::make_shared<std::thread>(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard);
|
|
||||||
m_tasks[i]->active = true;
|
m_tasks[i]->active = true;
|
||||||
m_activeTaskCount++;
|
m_tasks[i]->thread = std::make_shared<std::thread>(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user