gpt4 book ai didi

c - 如何让主线程等待所有子线程完成?

转载 作者:太空狗 更新时间:2023-10-29 16:21:16 25 4
gpt4 key购买 nike

我打算在主线程中触发 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 我可以完成这项工作,但还有其他方法吗?

最佳答案

int main()
{
pthread_t tid[2];
for (int i = 0; i < 2; i++) {
pthread_create(&tid[i], NULL, routine, NULL);
}
for (int i = 0; i < 2; i++)
pthread_join(tid[i], NULL);
return 0;
}

关于c - 如何让主线程等待所有子线程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com