【发布时间】:2020-09-15 01:49:23
【问题描述】:
我想生成 N 个线程来执行我这样做的函数
for (int p = 0; p < threads; p++)
pthread_create(&tid[p], NULL, dowork, full);
现在我用过
for (int p = 0; p < threads; p++)
pthread_join(tid[p], NULL);
再次生成 n 个线程,但我想在其中一个创建的线程完成时生成另一个线程。 例如,我有 3 个线程来执行 6 个作业(使用不同的参数运行相同的函数 6 次) 如果其中一个线程完成,我会创建 3 个线程,立即创建另一个线程,而无需等待所有线程完成。 我该怎么做?
【问题讨论】:
-
为什么另一个线程而不是每个线程只是做更多的工作然后终止?
-
这样也可以,但我不知道特定线程何时结束
-
加入的问题是你会知道它们什么时候全部完成,但如果它们无序完成,你就无法知道。与其在线程和原子/互斥体/锁之间传递消息使代码复杂化,不如在每个线程中做更多的工作并称之为完成。
-
一旦线程完成,
pthread_join就会被解除阻塞。因此,您可以添加另一个线程来完成这项工作。这很简单,但您可能不知道哪个线程完成得最快。只要知道加入的线程就完成了。 -
我不在乎哪个完成得更快,我只想知道 3 个线程中的 1 个是否完成了,但线程数未知
标签: c multithreading pthreads