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