在Ubuntu中,使用C++实现多线程读取目录(readdir)可以通过以下步骤完成:
#include <iostream> #include <dirent.h> #include <pthread.h> #include <vector> struct ThreadData { std::string path; }; void* read_directory(void* arg) { ThreadData* data = static_cast<ThreadData*>(arg); DIR* dir = opendir(data->path.c_str()); if (dir == nullptr) { std::cerr << "Error opening directory: " << data->path << std::endl; return nullptr; } struct dirent* entry; while ((entry = readdir(dir)) != nullptr) { std::cout << "Thread " << pthread_self() << ": " << entry->d_name << std::endl; } closedir(dir); return nullptr; } int main() { std::string path = "/path/to/directory"; int num_threads = 4; std::vector<pthread_t> threads(num_threads); std::vector<ThreadData> thread_data(num_threads); for (int i = 0; i < num_threads; ++i) { thread_data[i].path = path; if (pthread_create(&threads[i], nullptr, read_directory, &thread_data[i]) != 0) { std::cerr << "Error creating thread "<< i << std::endl; return 1; } } for (int i = 0; i < num_threads; ++i) { pthread_join(threads[i], nullptr); } return 0; } 这个示例中,我们创建了4个线程,每个线程都会读取相同的目录。read_directory函数负责打开目录、读取其中的条目并关闭目录。主函数负责创建线程、传递数据并等待它们完成。
编译并运行此程序,你将看到多个线程同时读取目录的内容。注意,由于多个线程同时访问相同的资源(在这种情况下是目录),可能会出现竞争条件。为了避免这种情况,可以使用互斥锁或其他同步机制来确保线程安全。