日期:2014-05-16  浏览次数:20618 次

多线程的问题
请问,我在主线程里启动若干个子线程,子线程的个数不定,
可能是(6-7左右),
现在我想在子线程结束时,用信号通知主线程。
主线程收到所有的子线程结束通知后,也继续执行,结束。

这样怎么实现,谢谢大家了

------解决方案--------------------
一定要用信号吗?
pthreadjoin()应该可以吧
------解决方案--------------------
int pthread_join( pthread_t tid, void **status);
参数tid是希望等待的线程的线程号,status是指向线程返回值的指针,线程的返回值就是pthread_exit中的value_ptr参数,或者是return语句中的返回值,该函数可用于线程间的同步。
------解决方案--------------------
pthread_join只能让主线程同一时刻等待一个线程,如果你等待的线程们结束时没有顺序的话,那么很可能会让主线程死锁。
可以用pthread_cond_t来让主线程等待一个条件变量。
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
如主线程
pthread_mutex_lock(&mut);
while (wait_thread_num> 0) {
pthread_cond_wait(&cond, &mut);
wait_thread_num--;
}
pthread_mutex_unlock(&mut);
被等待线程在线程退出前,调用
pthread_mutex_lock(&mut);
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mut);

如上所示代码可以很好解决多线程程序,主线程在退出前等待其它线程退出的需求。