MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_task_thread_pool.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_TASK_THREAD_POOL_H_1699017261
12#define INCGUARD_MGL_TASK_THREAD_POOL_H_1699017261
13
14#include <cstddef>
15
19
20namespace MGL::Task
21{
23{
24public:
25 int32_t Initialize(int32_t threadCount) noexcept;
26
27 /* ------------------------------------------------------------------------- */
33 /* ------------------------------------------------------------------------- */
34 [[nodiscard]] constexpr bool IsAvailable() const noexcept
35 {
36 return _isAvailable;
37 }
38
39 bool Execute(Node *node, ExecuteStage stage) noexcept;
40
41 void WaitForExecutable() noexcept;
42 void WaitForComplete() noexcept;
43 void SyncBarrier(Identifier identifier) noexcept;
44
45 void OnCompleted(uint32_t index, const Node *node) noexcept override;
46
47private:
48 struct Element
49 {
51 int32_t next{-1};
52 };
53
54 bool _isAvailable{false};
55
56 Element _freeTop;
57
58 STL::vector<Element> _threads;
59 uint32_t _executeCount{0};
60
61 STL::unordered_map<Identifier, uint32_t> _barrierMap;
62
63 std::mutex _mutex;
64 std::mutex _conditionMutex;
65 std::condition_variable _condition;
66};
67} // namespace MGL::Task
68
69#endif // INCGUARD_MGL_TASK_THREAD_POOL_H_1699017261
70
71// vim: et ts=4 sw=4 sts=4
タスクノード
Definition mgl_task_node.h:20
スレッドからの通知を受けるためのリスナークラス
Definition mgl_task_thread.h:28
Definition mgl_task_thread_pool.h:23
void OnCompleted(uint32_t index, const Node *node) noexcept override
完了通知
Definition mgl_task_thread_pool.cc:177
constexpr bool IsAvailable() const noexcept
スレッドプールが利用可能かを取得
Definition mgl_task_thread_pool.h:34
void WaitForExecutable() noexcept
実行可能になるまで待機
Definition mgl_task_thread_pool.cc:127
int32_t Initialize(int32_t threadCount) noexcept
初期化処理
Definition mgl_task_thread_pool.cc:24
void WaitForComplete() noexcept
全てのタスクを終えるまで待機
Definition mgl_task_thread_pool.cc:143
void SyncBarrier(Identifier identifier) noexcept
バリア同期を行う
Definition mgl_task_thread_pool.cc:160
MGL STLコンテナの代替
MGL STLのメモリ関連の代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
uint8_t ExecuteStage
実行ステージ
Definition mgl_task_defs.h:68
MGL タスクシステム用スレッド