c++使用两个线程,打开两个行数相等文本文件,按行交替将两个文件输出
时间: 2024-03-02 12:54:01 浏览: 72
好的,下面是一个 C++ 示例代码,实现了使用两个线程来交替读取两个文本文件的内容并输出到一个新文件:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx; // 用于保护输出文件的互斥锁
void read_file(string file_name, vector<string>& output_list)
{
ifstream fin(file_name);
if (fin.is_open()) {
string line;
while (getline(fin, line)) {
mtx.lock(); // 加锁
output_list.push_back(line);
mtx.unlock(); // 解锁
}
}
fin.close();
}
void write_file(vector<string>& output_list)
{
ofstream fout("output.txt");
if (fout.is_open()) {
for (int i = 0; i < output_list.size(); i++) {
mtx.lock(); // 加锁
fout << output_list[i] << endl;
mtx.unlock(); // 解锁
}
}
fout.close();
}
int main()
{
string file1 = "file1.txt";
string file2 = "file2.txt";
vector<string> output_list;
thread t1(read_file, file1, ref(output_list));
thread t2(read_file, file2, ref(output_list));
t1.join();
t2.join();
thread t3(write_file, ref(output_list));
t3.join();
return 0;
}
```
这个代码中,我们定义了两个函数 `read_file` 和 `write_file`,分别用于读取文件和写入文件。在 `read_file` 函数中,我们使用互斥锁来保护共享的 `output_list` 容器,以保证线程安全。在 `write_file` 函数中,我们同样使用互斥锁来保护输出文件操作的线程安全。
在 `main` 函数中,我们定义了两个线程 `t1` 和 `t2`,分别用于读取两个文件的内容,并将结果保存到 `output_list` 容器中。然后,我们再定义一个线程 `t3`,用于将 `output_list` 中的内容按行交替输出到文件中。最后,我们调用 `join` 函数等待线程结束。
阅读全文