Wie kann man den Haupt-Thread warten lassen, bis alle untergeordneten Threads beendet sind?

Ich beabsichtige, 2 Threads im Haupt-Thread abzufeuern, und der Haupt-Thread sollte warten, bis alle 2 untergeordneten Threads fertig sind. So mache ich das.

void *routine(void *arg)
{
    sleep(3);
}

int main()
{
    for (int i = 0; i < 2; i++) {
        pthread_t tid;
        pthread_create(&tid, NULL, routine, NULL);
        pthread_join(&tid, NULL);  //This function will block main thread, right?
    }
}

Im obigen Codepthread_join Zwar wartet der Haupt-Thread auf die untergeordneten Threads, aber das Problem ist, dass der zweite Thread erst erstellt wird, wenn der erste beendet ist. Das will ich nicht.

Was ich will, ist, dass die 2 Threads sofort im Haupt-Thread erstellt werden, und dann wartet der Haupt-Thread darauf, dass sie fertig sind. Sieht aus als obpthread_join kann den Trick nicht machen, oder?

Ich dachte, vielleicht über einesemaphore Ich kann den Job machen, aber auf andere Weise?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage