您好,登錄后才能下訂單哦!
在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.”表示所有文件已成功解壓。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。