在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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。