Crafter.Thread/interfaces/Crafter.Thread-ThreadPool.cppm

32 lines
1 KiB
Text
Raw Normal View History

2026-07-22 17:58:06 +02:00
//SPDX-License-Identifier: LGPL-3.0-only
//SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
2025-02-17 22:31:53 +01:00
export module Crafter.Thread:ThreadPool;
2025-11-02 06:47:04 +01:00
import std;
2025-02-17 22:31:53 +01:00
2025-11-02 07:14:39 +01:00
namespace Crafter {
2025-02-17 22:31:53 +01:00
struct ThreadStorage {
std::vector<std::function<void(void)>> tasks;
std::vector<std::function<void(void)>> buffer;
std::condition_variable cv;
std::mutex mutex;
std::atomic<unsigned int> taskCount;
std::thread thread;
};
export class ThreadPool {
public:
static inline std::atomic<bool> stopped;
static void Start(int maxThreads = -1);
static void Stop();
static void Enqueue(std::function<void(void)> task);
static void Enqueue(std::vector<std::function<void(void)>> tasks);
static void JoinPool();
static inline unsigned int threadCount;
static inline std::atomic<unsigned int> activeThreads;
private:
static inline std::unordered_map<std::thread::id, ThreadStorage*> threadIdMap;
static inline ThreadStorage* threadStorage;
static void WaitAndExecuteTask(ThreadStorage* threadStorage);
};
}