readdir
函数本身并不是线程安全的。在多线程环境下使用 readdir
时,需要采取适当的同步措施来避免竞争条件和数据不一致的问题。
以下是一些建议:
#include <pthread.h>
#include <dirent.h>
pthread_mutex_t dir_mutex = PTHREAD_MUTEX_INITIALIZER;
void* read_directory(void* arg) {
DIR *dir;
struct dirent *entry;
pthread_mutex_lock(&dir_mutex);
dir = opendir(arg);
if (dir == NULL) {
pthread_mutex_unlock(&dir_mutex);
return NULL;
}
while ((entry = readdir(dir)) != NULL) {
// 处理目录项
}
closedir(dir);
pthread_mutex_unlock(&dir_mutex);
return NULL;
}
#include <pthread.h>
#include <dirent.h>
pthread_rwlock_t dir_rwlock = PTHREAD_RWLOCK_INITIALIZER;
void* read_directory(void* arg) {
DIR *dir;
struct dirent *entry;
pthread_rwlock_rdlock(&dir_rwlock);
dir = opendir(arg);
if (dir == NULL) {
pthread_rwlock_unlock(&dir_rwlock);
return NULL;
}
while ((entry = readdir(dir)) != NULL) {
// 处理目录项
}
closedir(dir);
pthread_rwlock_unlock(&dir_rwlock);
return NULL;
}
总之,在多线程环境下使用 readdir
时,确保采取适当的同步措施以避免潜在的问题。