nlib
|
細粒度のタスクを投入するのに向いたスレッドプールです。 [詳解]
#include "nn/nlib/threading/ThreadPool.h"
nn::nlib::threading::detail::LockFreeThreadPoolBaseを継承しています。
公開型 | |
typedef void *(* | Func) (void **args, size_t n) |
スレッドプールに投入できる関数の型です。 [詳解] | |
typedef void(* | Callback) (void *result) |
タスク終了時に呼び出されるコールバック関数の型です。 [詳解] | |
公開メンバ関数 | |
LockFreeThreadPool () noexcept | |
デフォルトコンストラクタです。Init() で初期化する必要があります。 | |
~LockFreeThreadPool () noexcept | |
デストラクタです。内部で起動したスレッドを全てJoinします。 | |
errno_t | Init (size_t work_queue_size, size_t thread_count, const ThreadSettings &settings) noexcept |
スレッドを起動してスレッドプールを初期化します。 [詳解] | |
errno_t | SubmitVarArgs (Func func, Callback callback, size_t n,...) noexcept |
スレッドプールに関数の引数の数を指定してタスクを投入します。 [詳解] | |
errno_t | Submit (Func func, Callback callback) |
関数への引数を指定せず、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0) |
関数への引数を1個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
errno_t | Submit (Func func, Callback callback, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs() を参照してください。 [詳解] | |
size_t | GetThreadCount () |
スレッドプールが保有するスレッドの数を返します。 | |
細粒度のタスクを投入するのに向いたスレッドプールです。
N | スレッドプールに投入する関数が受け取れる引数の最大数 |
nlib_sleep()
又はnlib_yield()
によって待つので、アイドル時のオーバーヘッドは上昇します。 ThreadPool.h の 114 行目に定義があります。
nn::nlib::threading::LockFreeThreadPool< N >::Callback |
nn::nlib::threading::LockFreeThreadPool< N >::Func |
スレッドプールに投入できる関数の型です。
[in] | args | void* 型ポインタの列へのポインタ |
[in] | n | args に格納されているvoid* 型ポインタの数 |
n
はスレッドプールのテンプレート引数N
に一致することに注意してください。 ThreadPool.h の 117 行目に定義があります。
|
noexcept |
スレッドを起動してスレッドプールを初期化します。
[in] | work_queue_size | 投入されたタスクが格納されるキューのサイズ |
[in] | thread_count | 起動するスレッドの数 |
[in] | settings | 起動するスレッドの設定 |
0 | 成功した場合 |
EINVAL | thread_count が0又は65535より大きい場合 |
ENOMEM | メモリの確保に失敗した場合 |
EALREADY | 既に初期化済みの場合 |
その他 | スレッドの作成に失敗した場合 |
ThreadPool.h の 344 行目に定義があります。
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback | ||
) |
関数への引数を指定せず、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0 | ||
) |
関数への引数を1個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4, | ||
void * | arg5 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
[in] | arg5 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4, | ||
void * | arg5, | ||
void * | arg6 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
[in] | arg5 | スレッドプールで実行される関数への引数 |
[in] | arg6 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4, | ||
void * | arg5, | ||
void * | arg6, | ||
void * | arg7 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
[in] | arg5 | スレッドプールで実行される関数への引数 |
[in] | arg6 | スレッドプールで実行される関数への引数 |
[in] | arg7 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4, | ||
void * | arg5, | ||
void * | arg6, | ||
void * | arg7, | ||
void * | arg8 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
[in] | arg5 | スレッドプールで実行される関数への引数 |
[in] | arg6 | スレッドプールで実行される関数への引数 |
[in] | arg7 | スレッドプールで実行される関数への引数 |
[in] | arg8 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
nn::nlib::threading::LockFreeThreadPool< N >::Submit | ( | Func | func, |
Callback | callback, | ||
void * | arg0, | ||
void * | arg1, | ||
void * | arg2, | ||
void * | arg3, | ||
void * | arg4, | ||
void * | arg5, | ||
void * | arg6, | ||
void * | arg7, | ||
void * | arg8, | ||
void * | arg9 | ||
) |
関数への引数を2個指定して、スレッドプールにタスクを投入します。詳細はSubmitVarArgs()
を参照してください。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | arg0 | スレッドプールで実行される関数への引数 |
[in] | arg1 | スレッドプールで実行される関数への引数 |
[in] | arg2 | スレッドプールで実行される関数への引数 |
[in] | arg3 | スレッドプールで実行される関数への引数 |
[in] | arg4 | スレッドプールで実行される関数への引数 |
[in] | arg5 | スレッドプールで実行される関数への引数 |
[in] | arg6 | スレッドプールで実行される関数への引数 |
[in] | arg7 | スレッドプールで実行される関数への引数 |
[in] | arg8 | スレッドプールで実行される関数への引数 |
[in] | arg9 | スレッドプールで実行される関数への引数 |
0 | 成功した場合 |
EAGAIN | キューが一杯だった場合 |
|
noexcept |
スレッドプールに関数の引数の数を指定してタスクを投入します。
[in] | func | スレッドプールで実行される関数 |
[in] | callback | func の戻り値を引数にとるコールバック関数 |
[in] | n | 後に続くfunc に渡される引数の数 |
0 | 成功した場合 |
EINVAL | n が大きすぎる場合 |
EAGAIN | キューが一杯だった場合 |
Submit()
関数を利用する方が高速です。 func
とcallback
にNULL
を設定することが可能です。 func
のみがNULL
設定された場合は、NULL
がコールバック関数に渡されます。 ThreadPool.h の 358 行目に定義があります。
© 2012-2016 Nintendo Co., Ltd. All rights reserved.