我只希望我的主线程在退出之前等待我所有的(p)线程完成。
线程来回移动的原因很多,我真的不想跟踪所有线程-我只想知道线程什么时候消失了。
wait()对子进程执行此操作,在没有子进程时返回ECHILD,但是wait(似乎不与(p)个线程一起工作)。
我真的不想麻烦保留每个未完成线程的列表(随它们来来去去),然后必须在每个线程上调用pthread_join。
有没有一种快速而又肮脏的方式来做到这一点?
正确的方法是跟踪所有pthread_id,但是您要求一种快速而肮脏的方法,所以就在这里。基本上:
。
volatile int running_threads = 0; pthread_mutex_t running_mutex = PTHREAD_MUTEX_INITIALIZER; void * threadStart() { // do the thread work pthread_mutex_lock(&running_mutex); running_threads--; pthread_mutex_unlock(&running_mutex); } int main() { for (i = 0; i < num_threads;i++) { pthread_mutex_lock(&running_mutex); running_threads++; pthread_mutex_unlock(&running_mutex); // launch thread } while (running_threads > 0) { sleep(1); } }