Как заставить основной поток ждать завершения всех дочерних потоков?

Я намереваюсь запустить 2 потока в основном потоке, и основной поток должен дождаться завершения всех 2 дочерних потоков, вот как я это делаю.

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?
    }
}

В приведенном выше коде,pthread_join действительно заставляет основной поток ждать дочерние потоки, но проблема в том, что второй поток не будет создан до тех пор, пока не завершится первый. Это не то, что я хочу.

Я хочу, чтобы 2 потока сразу создавались в основном потоке, а затем основной поток ожидал их завершения. Похоже наpthread_join не может сделать трюк, не так ли?

Я думал, может быть, черезsemaphore Я могу сделать работу, но как-то иначе?

Ответы на вопрос(3)

Ваш ответ на вопрос