(C ++)如何暂停主线程,然后在另一个线程中恢复?

时间:2012-02-22 19:49:49

标签: c++ multithreading pthreads

我没有在Window的第一次工作。我尝试了这里描述的技术:无济于事。

基本上,我正在构建一个需要在输出结果之前暂停主线程的webcrawler。当我的最后一个pthread死亡时,主线程需要恢复。我知道我的最后一个pthread死了,我只是不知道如何暂停或恢复主线程。

非常感谢任何帮助!

编辑:

因此,在我想暂停/恢复main时,可能只存在一个工作线程。我在构造函数中执行此操作,并在收集更多链接时生成线程。

3 个答案:

答案 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)

主线程通常是您控制其他线程的线程。如果您需要等到所有其他线程都完成,为什么不从主线程监视它们。创建另一个线程来控制主线程似乎是一个设计缺陷。