我一直在进行多线程目录搜索,每次运行到新目录或文件时都会创建一个线程。到目前为止,文件线程是并行的并且可以正常工作,但是由于它是递归的,所以我不确定在哪里连接新目录线程。我试过将其放在函数的底部,但它只会创建一个循环(不是无限的,但肯定是错误的)
我的代码在下面,为了便于理解,我还有一个伪代码。
为便于解释和清除混乱的代码,以下是伪代码:
recursive function{
if (!(dir = opendir(ca->SD))){{
return;
}
while ((ptr = readdir(dir)) != NULL) {
if (ptr->d_type == DT_DIR) {
if (strcmp(ptr->d_name, "..") == 0||strcmp(ptr->d_name, ".") == 0){
continue;
}
create thread/call recursive function
}else(if file){
create thread/call file handler function
}
}
thread join for any live threads;
}
我只是对正确放置任何目录线程的联接的位置感到困惑。我目前不断收到某种循环。
答案 0 :(得分:2)
我认为您不应该尝试创建数量未知的线程,因为它的性能会很差。在这种情况下,最好使用线程池,您可以在其中控制最大线程数,而不必为每个目录条目创建和销毁线程。
在此link上查看有关什么是线程池的信息。
在您的示例中,您必须在每次递归调用结束时等待线程终止。我的意思是每个searchdirectory
的调用应在返回之前等待其创建的线程的终止。