我没有在Window的第一次工作。我尝试了这里描述的技术:无济于事。
基本上,我正在构建一个需要在输出结果之前暂停主线程的webcrawler。当我的最后一个pthread死亡时,主线程需要恢复。我知道我的最后一个pthread死了,我只是不知道如何暂停或恢复主线程。
非常感谢任何帮助!
编辑:
因此,在我想暂停/恢复main时,可能只存在一个工作线程。我在构造函数中执行此操作,并在收集更多链接时生成线程。
答案 0 :(得分:6)
在主线程中,在每个工作线程上调用pthread_join()
。
答案 1 :(得分:2)
听起来基本的fork-join model会对你有用:
线程连接是一种允许程序员收集所有内容的协议 逻辑同步点的相关线程。例如,在 fork-join并行性,生成线程以处理并行任务 然后在完成他们之后再加入主线程 相应的任务(从而在连接处执行隐式屏障) 点)。请注意,执行连接的线程已终止 执行各自的线程功能。
稍后在同一文档中的示例:
int main(int argc, char **argv) {
pthread_t thr[NUM_THREADS];
int i, rc; /* create a thread_data_t argument array */
thread_data_t thr_data[NUM_THREADS]; /* create threads */
for (i = 0; i < NUM_THREADS; ++i) {
thr_data[i].tid = i;
if ((rc = pthread_create(&thr[i], NULL, thr_func, &thr_data[i]))) {
fprintf(stderr, "error: pthread_create, rc: %d\n", rc);
return EXIT_FAILURE;
}
}
/* block until all threads complete */
for (i = 0; i < NUM_THREADS; ++i) {
pthread_join(thr[i], NULL);
}
return EXIT_SUCCESS;
}
答案 2 :(得分:0)
主线程通常是您控制其他线程的线程。如果您需要等到所有其他线程都完成,为什么不从主线程监视它们。创建另一个线程来控制主线程似乎是一个设计缺陷。