12GX_CORE_NAMESPACE_BEGIN()
44 GX_FORCE_INLINE
b32 isLocked(
void)
const {
return _lockFlag; }
53 GX_FORCE_INLINE GxNativeMutex*
getMutex(
void){
return &_mutex; }
121 static s32
increment(
volatile s32* pValue);
123 static s32
decrement(
volatile s32* pValue);
160#if defined(_PS4) || defined(_PS5)
161 GxNativeThreadCondition _cond;
163 volatile s32 _setCount;
164#elif defined(_WINDOWS) || defined(_XBOX_XS)
167 GxNativeThreadEvent _event;
195 static constexpr u32 NAME_LENGTH = 27;
214 static constexpr u32 HARDWARE_THREAD_MAX = 6;
215#elif defined(_WINDOWS)
218 static constexpr u32 HARDWARE_THREAD_MAX = 3;
220 static constexpr u32 HARDWARE_THREAD_MAX = 12;
221#elif defined(_XBOX_XS)
222 static constexpr u32 HARDWARE_THREAD_MAX = 14;
242#if defined(_WINDOWS) || defined(_XBOX_XS)
244 constexpr u32 getId(
void)
const {
return _threadId; }
246 constexpr void setId(u32
id){
_threadId = id; }
249 b32 isStop(void) const;
251 constexpr u32
getIndex(
void)
const {
return _index; }
253#if defined(GX_THREAD_LOCAL_STORAGE)
259 constexpr GxRandom* getRandomGenerator(void) const { return _pRandomGenerator; }
262 constexpr GX_CSTR getName(
void)
const {
return _name; }
265 GX_FORCE_INLINE static void setFixThread(b32 on){ _fixThreadFlag = on; }
276 static b32 casU32(
volatile u32* pTarget, u32 oldValue, u32 newValue);
278 static b32 casPointer(
volatile void** ppTarget,
void* pOld,
void* pNew);
286 b32 create(
void* pIn,
PRIORITY priority, u32 stackSize, s32 cpuIndex = -1, GX_CSTR name =
"GxThread",
b32 profile =
false);
295 static void sleep(u32 milliSecond);
306 constexpr void setIndex(u32 index){ _index = index; }
309 static void* WINAPI startRoutine(
void* pContext);
311 static void* startRoutine(
void* pContext);
312#elif defined(_WINDOWS) || defined(_XBOX_XS)
313 static u32 WINAPI startRoutine(
void* pContext);
315 static void startRoutine(
void* pContext);
318 void closeHandle(void);
326#if defined(GX_THREAD_LOCAL_STORAGE)
336 static b32 _fixThreadFlag;
340 GxNativeMutex _mutex;
343#if defined(_WINDOWS) || defined(_XBOX_XS)
357 GX_CHAR _name[NAME_LENGTH + 1];
386 GxWorkerThread(
void) : _workerIndex(0), _pOwner(
nullptr), _requestStopFlag(false), _initializeLocalStorageFlag(false){}
446 b32 _requestStopFlag;
447 b32 _initializeLocalStorageFlag;
505 virtual void initialize(
GxThread::PRIORITY priority, s32 maxJob, GX_CSTR name =
"GxWorkerThread", u32 stackSize = GX_WORKER_THREAD_STACKSIZE);
510 virtual void terminate(void);
597 void initialize(
GxThread::PRIORITY priority, s32 maxJob, GX_CSTR name =
"GxSequentialThread", u32 stackSize = GX_WORKER_THREAD_STACKSIZE)
override;
633 s32
addJob(
GxClassBaseRoot* pObject, GX_OBJECT_FUNCTION_POINTER pFunction,
void* pArgument)
override;
660GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
void GxTypedObject
その他
Definition GxDefine.h:213
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
クリティカルセクションクラス
Definition GxThread.h:20
void lock(void)
ロック
Definition GxThread.cpp:139
GX_FORCE_INLINE GxNativeMutex * getMutex(void)
ミューテックスを取得
Definition GxThread.h:53
GX_FORCE_INLINE b32 isLocked(void) const
ロック状態を取得する(状態の確認のみ)
Definition GxThread.h:44
void unlock(void)
アンロック
Definition GxThread.cpp:154
イベントクラス
Definition GxThread.h:132
b32 setEvent(void)
イベントを設定
Definition GxThread.cpp:268
GxEvent(void)
コンストラクタ
Definition GxThread.cpp:227
b32 waitEvent(s32 milliSecond=-1)
イベント待機
Definition GxThread.cpp:291
virtual ~GxEvent(void)
デストラクタ
Definition GxThread.cpp:250
インターロッククラス
Definition GxThread.h:103
virtual ~GxInterlock(void)
デストラクタ
Definition GxThread.h:112
GxInterlock(void)
コンストラクタ
Definition GxThread.h:110
static s32 decrement(volatile s32 *pValue)
数値のデクリメント
Definition GxThread.cpp:210
static s32 increment(volatile s32 *pValue)
数値のインクリメント
Definition GxThread.cpp:194
算術演算クラス
Definition GxMath.h:84
static constexpr u32 VALUE_32
32
Definition GxMath.h:124
プロパティクラス
Definition GxProperty.h:48
乱数クラス
Definition GxRandom.h:20
実行時型情報クラス
Definition GxRtti.h:154
スコープ内クリティカルセクションクラス
Definition GxThread.h:71
GxScopeCriticalSection(GxCriticalSection *pCriticalSection)
コンストラクタ
Definition GxThread.h:78
virtual ~GxScopeCriticalSection(void)
デストラクタ
Definition GxThread.h:80
同期実行ワーカースレッド管理クラス
Definition GxThread.h:571
GxSequentialThreadManager(void)
デフォルトコンストラクタ
Definition GxThread.h:590
b32 _executeJobFlag
ジョブ実行中フラグ
Definition GxThread.h:654
void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize=GX_WORKER_THREAD_STACKSIZE) override
初期化
Definition GxThread.cpp:1034
s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION pFunction) override
ジョブ追加
Definition GxThread.cpp:1085
GX_FORCE_INLINE void setNumWorkerThread(u32 num)
スレッド数を設定
Definition GxThread.h:618
~GxSequentialThreadManager(void) override
デストラクタ
Definition GxThread.cpp:1020
b32 _useMainThreadFlag
メインスレッドを使用するか
Definition GxThread.h:653
s32 _executeJobIndex
実行しているジョブインデックス
Definition GxThread.h:652
GxSequentialThreadManager(b32 useMainThreadFlag)
コンストラクタ
Definition GxThread.h:592
GX_FORCE_INLINE u32 getMaxThread(void) override
最大スレッド数を取得
Definition GxThread.h:612
GX_FORCE_INLINE b32 isExecuteJob(void) const
ジョブが実行中か判定
Definition GxThread.h:620
GX_FORCE_INLINE u32 getNumWorkerThread(void)
ワーカースレッド数を取得
Definition GxThread.h:616
GX_FORCE_INLINE b32 isComplete(void) override
全てのジョブが完了したか
Definition GxThread.h:643
void startJob(void) override
ジョブ実行開始
Definition GxThread.cpp:1147
void initializeThreadLocalStorage(void) override
TLSの初期化
Definition GxThread.h:603
void executeJob(GxThread *pThread) override
ジョブ実行
Definition GxThread.cpp:1207
s32 _numJob
ジョブ数
Definition GxThread.h:655
virtual void startWorkerThreadAll(void)
ワーカースレッド実行開始
Definition GxThread.cpp:1195
GX_FORCE_INLINE u32 getNumThread(void) override
スレッド数を取得
Definition GxThread.h:614
GxJobInformation * _pJobInformation
ジョブ情報
Definition GxThread.h:651
スレッドクラス
Definition GxThread.h:177
static b32 casPointer(volatile void **ppTarget, void *pOld, void *pNew)
ポインタCAS(Compare-And-Swap)
Definition GxThread.cpp:46
~GxThread(void) override
デストラクタ
Definition GxThread.cpp:453
static b32 casU32(volatile u32 *pTarget, u32 oldValue, u32 newValue)
符号なし32bit整数CAS(Compare-And-Swap)
Definition GxThread.cpp:24
static constexpr u32 INVALID_INDEX
無効スレッドインデックス
Definition GxThread.h:190
void stop(void)
停止(スレッド外からの呼び出し禁止)
Definition GxThread.cpp:760
static GxThread * getCurrentThread(void)
カレントスレッドを取得
Definition GxThread.cpp:505
virtual void createCallback(void)
作成時のコールバック関数
Definition GxThread.h:298
b32 create(void *pIn, PRIORITY priority, u32 stackSize, s32 cpuIndex=-1)
作成
Definition GxThread.cpp:532
static void sleep(u32 milliSecond)
スリープ
Definition GxThread.cpp:690
constexpr u32 getIndex(void) const
インデックスを取得
Definition GxThread.h:251
static void atomicExchangeU32(volatile u32 *pTarget, u32 newValue)
アトミックU32
Definition GxThread.cpp:78
static constexpr u32 MAIN_THREAD_INDEX
メインスレッドインデックス
Definition GxThread.h:192
virtual void threadMain(void *pArgument)=0
メインループ
static void barrierMemory(void)
メモリバリア
Definition GxThread.cpp:64
static constexpr u32 THREAD_MAX
スレッドの最大数
Definition GxThread.h:188
PRIORITY
優先度
Definition GxThread.h:199
void resume(void)
サスペンドから復帰
Definition GxThread.cpp:672
static GX_FORCE_INLINE b32 isFixThread(void)
スレッドのCPUを固定するか判定
Definition GxThread.h:267
GxNativeThread _threadId
スレッドID
Definition GxThread.h:332
static GxThread * _pThread[THREAD_MAX]
スレッド自身のポインタ
Definition GxThread.h:412
GxThread(void)
コンストラクタ
Definition GxThread.cpp:421
static u32 _num
作ったスレッド数
Definition GxThread.h:331
ワーカースレッドクラス
Definition GxThread.h:369
GX_FORCE_INLINE b32 waitCompleteEvent(s32 milliSecond=-1)
完了イベント待ち
Definition GxThread.h:422
GX_FORCE_INLINE b32 setCompleteEvent(void)
完了イベント開始
Definition GxThread.h:424
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxThread.h:420
constexpr u32 getWorkerIndex(void) const
ワーカースレッド用インデックスを取得
Definition GxThread.h:405
constexpr void setWorkerIndex(u32 index)
ワーカースレッド用インデックスを設定
Definition GxThread.h:407
constexpr void setOwner(GxWorkerThreadManager *pOwner)
管理者を設定
Definition GxThread.h:403
constexpr GxWorkerThreadManager * getOwner(void) const
管理者を取得
Definition GxThread.h:401
static void initializeMainThread(void)
メインスレッドの初期化
Definition GxThread.cpp:798
GX_FORCE_INLINE void setRequestStop(void)
停止リクエスト設定
Definition GxThread.h:426
GX_FORCE_INLINE b32 isRequestStop(void) const
停止リクエストチェック
Definition GxThread.h:428
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=-1)
開始イベント待ち
Definition GxThread.h:418
static u32 getCurrentWorkerIndex(void)
カレントのワーカースレッド用インデックスを取得
Definition GxThread.cpp:850
static void terminateMainThread(void)
メインスレッドの終了
Definition GxThread.cpp:823
void initializeThreadLocalStorage(void)
TLSの初期化
Definition GxThread.cpp:837
void createCallback(void) override
作成時のコールバック関数
Definition GxThread.cpp:860
void threadMain(void *pArgument) override
メインループ
Definition GxThread.cpp:869
ワーカースレッド管理クラス
Definition GxThread.h:456
virtual u32 getNumThread(void)
スレッド数を取得
Definition GxThread.h:524
GxWorkerThread * _pThread[GxThread::HARDWARE_THREAD_MAX]
スレッド
Definition GxThread.h:559
virtual void initialize(GxThread::PRIORITY priority, s32 maxJob, u32 stackSize=GX_WORKER_THREAD_STACKSIZE)
初期化
Definition GxThread.cpp:914
s32 _maxJob
最大ジョブ数
Definition GxThread.h:562
virtual u32 getMaxThread(void)
最大スレッド数を取得
Definition GxThread.h:522
static constexpr u32 WORKER_THREAD_MAX
ハードウェアスレッド最大数-1(1個は描画スレッドに使う)
Definition GxThread.h:468
virtual b32 isComplete(void)=0
全てのジョブが完了したか
ARGUMENT_TYPE
引数の種別
Definition GxThread.h:471
u32 _numThread
スレッド数
Definition GxThread.h:560
virtual void executeJob(GxThread *pWorkerThread)=0
ジョブ実行
static constexpr s32 INVALID_HANDLE
無効なハンドル
Definition GxThread.h:493
GxWorkerThreadManager(void)
コンストラクタ
Definition GxThread.h:502
virtual void initializeThreadLocalStorage(void)=0
TLSの初期化
virtual s32 getNumMaxJob(void)
最大ジョブ数を取得
Definition GxThread.h:526
u32 _maxThread
動的な最大スレッド数
Definition GxThread.h:561
virtual void startJob(void)=0
ジョブ実行開始
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION_PARAM pFunction, u32 argument, ARGUMENT_TYPE argumentType=ARGUMENT_TYPE::U32)=0
ジョブ追加
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION_POINTER pFunction, void *pArgument)=0
ジョブ追加
virtual s32 addJob(GxClassBaseRoot *pObject, GX_OBJECT_FUNCTION pFunction)=0
ジョブ追加
ビット指定型フラグ
Definition GxStruct.h:1338
32bitブーリアン
Definition GxDefine.h:173