Как заставить основной поток ждать завершения всех дочерних потоков?
Я намереваюсь запустить 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
Я могу сделать работу, но как-то иначе?