mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-28 15:57:59 +03:00
Add lock to parallel task class
This commit is contained in:
parent
918237113f
commit
455d547de7
2 changed files with 13 additions and 8 deletions
|
@ -70,10 +70,10 @@ namespace TEN::Utils
|
|||
|
||||
std::future<void> ParallelTaskManager::AddTask(const ParallelTask& task)
|
||||
{
|
||||
return AddTasks(ParallelTaskGroup{ task });
|
||||
return AddTasks(ParallelTasks{ task });
|
||||
}
|
||||
|
||||
std::future<void> ParallelTaskManager::AddTasks(const ParallelTaskGroup& tasks)
|
||||
std::future<void> ParallelTaskManager::AddTasks(const ParallelTasks& tasks)
|
||||
{
|
||||
// HEAP ALLOC: Create counter and promise.
|
||||
auto counter = std::make_shared<std::atomic<int>>();
|
||||
|
@ -97,7 +97,7 @@ namespace TEN::Utils
|
|||
// TODO: Make this a configuration option?
|
||||
constexpr auto SERIAL_UNIT_COUNT_MAX = 32;
|
||||
|
||||
auto tasks = ParallelTaskGroup{};
|
||||
auto tasks = ParallelTasks{};
|
||||
|
||||
// Process in parallel.
|
||||
if (g_GameFlow->GetSettings()->System.Multithreaded &&
|
||||
|
@ -156,8 +156,13 @@ namespace TEN::Utils
|
|||
// Increment counter for task group.
|
||||
counter->fetch_add(1, std::memory_order_relaxed);
|
||||
|
||||
// Add task with promise and counter handling.
|
||||
_tasks.push([this, task, counter, promise]() { HandleTask(task, *counter, *promise); });
|
||||
// LOCK: Restrict task queue access.
|
||||
{
|
||||
auto taskLock = std::unique_lock(_taskMutex);
|
||||
|
||||
// Add task with promise and counter handling.
|
||||
_tasks.push([this, task, counter, promise]() { HandleTask(task, *counter, *promise); });
|
||||
}
|
||||
}
|
||||
|
||||
void ParallelTaskManager::HandleTask(const ParallelTask& task, std::atomic<int>& counter, std::promise<void>& promise)
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
namespace TEN::Utils
|
||||
{
|
||||
using ParallelTask = std::function<void()>;
|
||||
using ParallelTaskGroup = std::vector<ParallelTask>;
|
||||
using ParallelTask = std::function<void()>;
|
||||
using ParallelTasks = std::vector<ParallelTask>;
|
||||
|
||||
class ParallelTaskManager
|
||||
{
|
||||
|
@ -35,7 +35,7 @@ namespace TEN::Utils
|
|||
void Initialize();
|
||||
|
||||
std::future<void> AddTask(const ParallelTask& task);
|
||||
std::future<void> AddTasks(const ParallelTaskGroup& tasks);
|
||||
std::future<void> AddTasks(const ParallelTasks& tasks);
|
||||
std::future<void> AddTasks(int elementCount, const std::function<void(int, int)>& splitTask);
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue