何百万回も呼び出される関数があり、この関数によって実行される作業はマルチスレッドです。関数は次のとおりです。
void functionCalledSoManyTimes()
{
for (int i = 0; i < NUM_OF_THREADS; i++)
{
pthread_create(&threads[i], &attr, thread_work_function, (void *)&thread_data[i]);
}
// wait
}
関数が呼び出されるたびにスレッドを作成し、thread_work_function
. はthread_work_function
単に一連の配列を処理し、thread_data
構造体にはそれらの配列へのポインターと各スレッドが担当するインデックスが含まれます。
この方法でアルゴリズムをマルチスレッド化すると、パフォーマンスが 20% 以上向上しましたが、私のプロファイリングでは、pthread_create を繰り返し呼び出すと、かなりのオーバーヘッドが発生することがわかりました。
私の質問は:pthread_create
関数が呼び出されるたびに呼び出すことなく、私の目標を達成する方法はありますか?
問題が解決しました。
皆さん、ありがとう、私はあなたの助けに本当に感謝しています! あなたのヒントを使用して、ここに解決策を書きました。