多个线程之一的 Pthread_join

Lip*_*eka 5 c linux pthreads

我的问题类似于如何在使用 pthread 时检查线程是否终止?。但我没有完全得到答案。

我的问题是......我创建了一定数量的线程,比如n。一旦 main 检测到任何一个线程的退出,它就会创建另一个线程,从而保持并发度为 n 等等。

主线程如何检测线程的退出。pthread_join 等待特定线程退出,但在我的例子中,它可以是 n 个线程中的任何一个。

谢谢

Ste*_*sop 3

最明显的是,无需像 aix 建议的那样重构代码,而是让每个线程设置一些内容来指示它已完成(可能是所有线程之间共享的数组中的值,每个工作线程一个槽),然后向条件变量发出信号。主线程等待条件变量,每次醒来时,处理所有已指示自己已完成的线程:可能有多个。

当然,这意味着如果线程被取消,您永远不会收到信号,因此请使用取消处理程序或不要取消线程。

  • @Juggler:您需要正确使用条件变量,我省略了详细信息,但有关于如何执行此操作或检查 pthreads 教程的问题。主线程将 (1) 获取互斥锁,(2) 检查是否需要执行任何操作,(3) 等待 condvar,(4) 转到 2。工作线程将 (1) 获取互斥锁,(2)记录有事情要做,(3) 向 condvar 发出信号,(4) 释放互斥体。 (2认同)