マルチスレッドのプログラミング

スレッドプールの関数

thr_pool.h ヘッダーファイルは、次の関数インタフェースを宣言します。

thr_pool_create()

スレッドプールを作成します。複数のプールを作成できます。

typedef struct thr_pool thr_pool_t;	/* クライアントには見えない */

thr_pool_t *thr_pool_create(uint_t min_threads, uint_t max_threads,
                uint_t linger, pthread_attr_t *attr);
min_threads

プール内のスレッドの最小数。

max_threads

プール内のスレッドの最大数。

linger

タスクが入力されないときに、アイドル状態のスレッドが終了前に存続できる秒数。アイドル状態のスレッドが終了できるのは、スレッドの最小数を超える余分なスレッドが存在する場合だけです。

attr

すべてのワークスレッドの属性。これは NULL の場合があります。

エラーが発生した場合、thr_pool_create() は、errno にエラーコードを設定して NULL を返します。

thr_pool_queue()

作業要求またはタスクをスレッドプールのジョブ待ち行列に入れます。

int  thr_pool_queue(thr_pool_t *pool, void *(*func)(void *), void *arg);
pool

thr_pool_create() から返されたスレッドプール識別子。

func

呼び出されるタスク関数。

arg

タスク関数に渡される唯一の引数。

エラーが発生した場合、thr_pool_queue() は、errno にエラーコードを設定して -1 を返します。

func 引数と arg 引数が、pthread_create の構文」に示されている pthread_create()start_routine 引数と arg 引数に似ていることに注意してください。thr_pool_queue() 関数は、既存のアプリケーション内の pthread_create() の置き換えとして使用できます。ただし、pthread_create() の代わりに thr_pool_queue() を使用する場合は、pthread_join() を使用してタスクの完了を待つことはできません。

thr_pool_wait()

スレッドプール内で待ち行列に入れられたすべてのジョブの完了を待ちます。

void thr_pool_wait(thr_pool_t *pool);

pool は、thr_pool_create() から返されたスレッドプール識別子です。

thr_pool_destroy()

待ち行列に入れられたすべてのジョブを取り消し、プールを削除します。アクティブにタスクを処理しているワークスレッドは取り消されます。

extern void thr_pool_destroy(thr_pool_t *pool); 

pool は、thr_pool_create() から返されたスレッドプール識別子です。