linux系统下批量数据线程安全拷贝示例
时间: 2024-10-19 09:03:10 浏览: 47
在Linux系统下,批量化、线程安全地复制大量文件通常会涉及到多线程操作,可以利用`pthreads`库或者现代的并发编程库如`std::thread`和`std::mutex`。下面是一个使用C++11的例子,展示了如何使用`std::vector`存储待处理的任务,并使用互斥锁保证线程安全:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建全局互斥锁
void copy_file(const std::string &src, const std::string &dest) {
std::ifstream in(src);
std::ofstream out(dest);
if (!in || !out) {
std::cerr << "Failed to open file: " << src << std::endl;
return;
}
std::lock_guard<std::mutex> lock(mtx); // 获取锁
std::copy(in, in.end(), out); // 线程安全的数据读取和写入
out.close();
in.close();
}
// 主函数,创建并启动线程队列
int main() {
std::vector<std::string> files_to_copy = {"file1.txt", "file2.txt", "file3.txt"}; // 要复制的文件列表
std::vector<std::thread> threads(files_to_copy.size());
for (size_t i = 0; i < files_to_copy.size(); ++i) {
threads[i] = std::thread(copy_file, files_to_copy[i], "destination_" + files_to_copy[i]); // 创建新线程
}
// 等待所有线程完成
for (auto& t : threads)
t.join();
std::cout << "Copy operation completed." << std::endl;
return 0;
}
```
在这个例子中,`copy_file`函数内部使用了`std::lock_guard`来自动获取和释放互斥锁,确保了对文件流的操作是原子性的。每个线程都在各自的临界区里操作,避免了数据竞争。
阅读全文