Я намерен запустить 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
я могу выполнить эту работу, но любым другим способом?