中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++解壓多文件并行處理

發布時間:2024-10-30 11:58:25 來源:億速云 閱讀:81 作者:小樊 欄目:編程語言

在C++中,要實現多文件并行處理,可以使用多線程(例如,使用C++11的std::thread庫)

#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
#include <queue>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
std::queue<std::string> file_queue;
bool done = false;

void extract_file(const std::string& file_path) {
    // 在這里實現文件解壓邏輯
    std::cout << "Extracting " << file_path << std::endl;

    // 模擬解壓過程
    std::this_thread::sleep_for(std::chrono::seconds(2));

    std::unique_lock<std::mutex> lock(mtx);
    file_queue.pop();
    cv.notify_one();
}

int main() {
    // 要解壓的文件列表
    std::vector<std::string> file_list = {"file1.zip", "file2.zip", "file3.zip"};

    // 將文件添加到隊列中
    for (const auto& file : file_list) {
        file_queue.push(file);
    }

    // 創建線程并啟動
    int num_threads = std::thread::hardware_concurrency();
    std::vector<std::thread> threads;
    for (int i = 0; i < num_threads; ++i) {
        threads.emplace_back(extract_file, "");
    }

    // 等待所有線程完成
    std::unique_lock<std::mutex> lock(mtx);
    while (!file_queue.empty() || !done) {
        cv.wait(lock);
    }

    // 等待所有線程結束
    for (auto& t : threads) {
        t.join();
    }

    std::cout << "All files extracted." << std::endl;

    return 0;
}

在這個示例中,我們首先創建了一個文件隊列,將要解壓的文件添加到隊列中。然后,我們創建了與硬件并發線程數相等的線程,并將它們分配給extract_file函數。extract_file函數從隊列中獲取文件并執行解壓操作。我們還使用了互斥鎖和條件變量來確保在任何時候只有一個線程可以訪問文件隊列。

當所有文件都從隊列中取出并且解壓完成后,主線程將等待所有工作線程結束。最后,程序輸出“All files extracted.”表示所有文件已成功解壓。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

连平县| 崇明县| 金昌市| 友谊县| 嘉善县| 长汀县| 浪卡子县| 佛坪县| 绍兴县| 东城区| 桑日县| 黑龙江省| 洛川县| 浦东新区| 大足县| 霍林郭勒市| 双城市| 台前县| 泰来县| 正镶白旗| 吴江市| 福清市| 兰考县| 田阳县| 方城县| 东至县| 孙吴县| 囊谦县| 宜良县| 泰兴市| 鄂温| 莲花县| 平湖市| 甘谷县| 平江县| 任丘市| 纳雍县| 萝北县| 萍乡市| 贵州省| 双江|