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

スレッドプールの例が示している内容

この例は、スレッドを使用したプログラミングで注意が必要な側面の 1 つである、取り消しと予期しないスレッドの終了を示しています。ワークスレッドが、予期されるとおりにタスク関数から単に復帰するのではなく、thr_pool_queue() に渡されたタスク関数内から pthread_exit() を呼び出すことによって終了する可能性があります。スレッドプールは、pthread_cleanup_push() 関数内の終了を捉えることによってこの状態から回復できます。唯一の弊害は、ここで別のワークスレッドを作成する必要がある点です。アクティブにタスクを処理しているワークスレッドは、thr_pool_destroy() で取り消されます。thr_pool_wait() または thr_pool_destroy() の呼び出し側は、待機中にアプリケーションによって取り消される可能性があります。この状態も、pthread_cleanup_push() を使用して対処できます。

このパッケージの例はそのままでも有用ですが、ここには含まれていない、次のようないくつかの機能がアプリケーションに必要になる可能性があります。