溫馨提示×

ubuntu readdir 怎樣實現多線程讀取

小樊
32
2025-07-15 04:44:59
欄目: 智能運維

在Ubuntu中,使用C++實現多線程讀取目錄(readdir)可以通過以下步驟完成:

  1. 包含必要的頭文件:
#include <iostream>
#include <dirent.h>
#include <pthread.h>
#include <vector>
  1. 定義一個結構體,用于存儲線程所需的數據:
struct ThreadData {
    std::string path;
};
  1. 創建一個線程函數,該函數將作為線程的入口點:
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;
}
  1. 在主函數中創建線程并啟動它們:
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函數負責打開目錄、讀取其中的條目并關閉目錄。主函數負責創建線程、傳遞數據并等待它們完成。

編譯并運行此程序,你將看到多個線程同時讀取目錄的內容。注意,由于多個線程同時訪問相同的資源(在這種情況下是目錄),可能會出現競爭條件。為了避免這種情況,可以使用互斥鎖或其他同步機制來確保線程安全。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女