如何同时写入单个文件
How can I write to a single file concurrently?
假设我有两个文件要读取。如何将每个文件的文件内容同时写入另一个文件?目前,我正在将每个文件的内容读取到向量中并在读取部分周围放置锁,但是当我在写入过程中执行类似操作时,我只能看到输出文件中其中一个文件的内容。
我正在使用 g++ -std=c++11 -pthread program_name 进行编译。欢迎任何意见或批评。
#include <iostream>
#include <thread>
#include <string>
#include <mutex>
#include <vector>
void read(const char *file);
void write(const vector<string> &v);
void read(const char *file) {
string line;
vector<string> v;
ifstream in(file);
m.lock();
while(getline(in, line)) {
v.push_back(line);
}
in.close();
m.unlock();
write(v);
}
void write(const vector<string> &v) {
ofstream out("Foo");
vector<string>::const_iterator it;
m.lock();
for(it = v.begin(), it != v.end(); ++it) {
out << *it << endl;
}
out.close();
m.unlock();
}
int main(int argc, char *argv[]) {
thread t[2];
for(int i = 1; i < 3; i++) {
t[i-1] = thread(read, argv[i]);
}
for(int k = 0; k < 2; k++) {
t[i].join();
}
return(0);
}
你应该将模式(第二个参数)传递给流的构造函数(http://www.cplusplus.com/reference/fstream/ofstream/ofstream/)ofstream out( "Foo", std::ofstream::app)
否则,每次调用 write 时,文件都会被覆盖。
并发性是一个不同的问题。如果问题由固有的顺序部分组成,则并发性没有多大意义。
相关文章:
- 如何将"cout"、"cerr"、"stdout"和"stderr"从C++程序定向到单个文件
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 从存储库读取单个文件时出现问题
- 获取单个文件的 Clang AST
- 无法在 Netbeans 中编译单个C++文件,但能够生成完整的项目
- g++在多个文件上比使用谷歌模拟的单片单个文件慢得多
- 在 netbeans 中编译项目中的单个文件
- 从许多并行可执行文件写入单个文件的最佳方法
- 覆盖单个文件的编译标志
- 多个内核写入单个文件
- 如何使用Python绑定到Clang来解析单个文件
- C++类,使用具有不同用户的单个文件
- 确定何时更改单个文件
- Qt 5.2.0 生成单个 .o 文件
- 如何在代码折叠之外的单个文件中管理长代码
- Cmake用于具有单个.h文件的库
- 如何检测单个文件的文件系统大小限制
- 分叉服务器,单个文件 - r/w 访问
- 接受单个文件或单个目录的 QFileDialog
- 单个文件代码中未定义的引用错误