c - 在哪里加入多线程目录搜索?

标签 c multithreading recursion directory thread-safety

我一直致力于多线程目录搜索,每次运行到新目录或文件时都会创建一个线程。到目前为止,文件线程是并行的并且工作正常,但我不确定在哪里加入新的目录线程,因为它是递归的。我试过将它放在函数的底部,但它只是创建了一个循环(不是无限的,但绝对是错误的)

下面是我的代码,为了便于理解,我还有一个伪代码。

为了便于解释和清理乱码,这里贴一段伪代码:

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;
}

我只是对在何处正确放置任何目录线程的连接感到困惑。我目前不断遇到某种循环。

最佳答案

我认为您不应该尝试创建未知数量的线程,因为它的性能会很差。在这种情况下,最好使用一个线程池,您可以在其中控制最大线程数,并且不会为每个目录条目创建和销毁线程。

看看这个link有关什么是线程池的信息。

在您的示例中,您必须在每次递归调用结束时等待线程终止。我的意思是每次调用 searchdirectory 都应该等待它创建的线程终止后再返回。

关于c - 在哪里加入多线程目录搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454314/

相关文章:

c - gdb 观察点未激活

c++ - ARM架构中C函数如何返回大小超过一个字的值

arrays - 在 C 中打印指针本身

ConsoleApp 中的 c# WebBrowser Print() 线程

c++ - 并行计算大 vector 的总和

ios - 当使用大量输入调用时,Swift 中的递归函数会崩溃

java - 堆栈溢出错误/无休止的递归

谁能给我解释一下这段C代码的工作原理吗?

c - Linux 系统克隆。释放堆栈内存

python - 如何创建递归金字塔函数?