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

C 在哪里加入多线程目录搜索?,c,multithreading,recursion,directory,thread-safety,C,Multithreading,Recursion,Directory,Thread Safety,我一直在进行多线程目录搜索,每次运行到新目录或文件时都会创建一个线程。到目前为止,文件线程是并行的,工作正常,但我不确定在哪里加入新的目录线程,因为它是递归的。我试着把它放在函数的底部,但它只是创建了一个循环(不是无限的,但肯定是错误的) 下面是我的代码,为了便于理解,我还有一个伪代码 为了便于解释和清除混乱的代码,这里有一个伪代码: recursive function{ if (!(dir = opendir(ca->SD))){{ return; } while ((ptr = re

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

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

为了便于解释和清除混乱的代码,这里有一个伪代码:

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

我只是不知道应该把任何目录线程的连接放在哪里。我目前一直在进行某种循环。

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

看看这个,了解什么是线程池


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

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

看看这个,了解什么是线程池


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

pthread\u mutex\u lock(&mutex)
然后
if(pthread_self()==initialtid){…
if
关闭后不使用
pthread_mutex_unlock()
,但在
if
语句中多次调用
pthread_mutex_unlock()
然后
if(pthread_self())==initialtid){…
if
关闭后没有
pthread\u mutex\u unlock()
,但多次调用
pthread\u mutex\u unlock()
if
语句中的
本身就是一个灾难配方。不幸的是,项目的性质要求为每个目录创建一个线程,数量未知的目录,所以我无法做到这一点。不幸的是,项目的性质要求为每个目录创建一个线程,数量未知的目录董事会,所以我不能这么做。