7.26.24. grn_thread_*
#
7.26.24.1. 概要#
スレッド関連のAPIには grn_thread_
プレフィックスがついています。
通常、このAPIを使う必要はありません。
Groongaサーバーを実装するときにこのAPIを使いたくなるかもしれません。
7.26.24.2. 例#
以下は、 groonga 実行ファイル が実際に使っている grn_thread_*
APIの使い方です。 groonga 実行ファイル は最大スレッド数を増やすと、スレッドプールのサイズを増やします。一方、 groonga 実行ファイル は最大スレッド数を減らすと、スレッドプールのサイズを減らします。もし、すでに減少後のスレッドプールのサイズ以上のスレッドが動いていたらそれらを止めます。
static grn_mutex q_mutex;
static grn_cond q_cond;
static uint32_t nfthreads;
static uint32_t max_nfthreads;
static uint32_t
groonga_get_thread_limit(void *data)
{
return max_nfthreads;
}
static void
groonga_set_thread_limit(uint32_t new_limit, void *data)
{
uint32_t i;
uint32_t current_nfthreads;
MUTEX_LOCK(q_mutex);
current_nfthreads = nfthreads;
max_nfthreads = new_limit;
MUTEX_UNLOCK(q_mutex);
if (current_nfthreads > new_limit) {
for (i = 0; i < current_nfthreads; i++) {
MUTEX_LOCK(q_mutex);
COND_SIGNAL(q_cond);
MUTEX_UNLOCK(q_mutex);
}
}
}
int
main(int argc, char *argv)
{
/* ... */
grn_thread_set_get_limit_func(groonga_get_thread_limit, NULL);
grn_thread_set_set_limit_func(groonga_set_thread_limit, NULL);
grn_init();
/* ... */
}
7.26.24.3. リファレンス#
-
typedef uint32_t (*grn_thread_get_limit_func)(void *data)#
最大スレッド数を返す関数の型です。
-
typedef void (*grn_thread_set_limit_func)(uint32_t new_limit, void *data)#
最大スレッド数を設定する関数の型です。
-
uint32_t grn_thread_get_limit(void)#
最大スレッド数を返します。
grn_thread_set_get_limit_func()
でgrn_thread_get_limit_func
を設定していない場合は、常に0
を返します。- 戻り値:
最大スレッド数または
0
。
-
void_t grn_thread_set_limit(uint32_t new_limit)#
最大スレッド数を設定します。
grn_thread_set_set_limit_func()
でgrn_thread_set_limit_func
を設定していない場合はなにもしません。- パラメータ:
new_limit -- 新しい最大スレッド数。
-
void grn_thread_set_get_limit_func(grn_thread_get_limit_func func, void *data)#
最大スレッド数を返すカスタム関数を設定します。
data
はgrn_thread_get_limit()
がfunc
を呼ぶときにfunc
に渡されます。- パラメータ:
func -- 最大スレッド数を返すカスタム関数。
data --
func
が呼ばれるときにfunc
に渡されるユーザーのためのデータ。
-
void grn_thread_set_set_limit_func(grn_thread_set_limit_func func, void *data)#
最大スレッド数を設定するカスタム関数を設定します。
data
はgrn_thread_set_limit()
がfunc
を呼ぶときにfunc
に渡されます。- パラメータ:
func -- 最大スレッド数を設定するカスタム関数。
data --
func
が呼ばれるときにfunc
に渡されるユーザーのためのデータ。