假设我有两个我想读的文件。如何同时将每个文件的文件内容写入另一个文件?目前,我正在将每个文件的内容读入一个向量并在读取部分周围放置锁定,但是当我在写入过程中执行类似操作时,我只看到输出文件中某个文件的内容。
我正在使用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);
}
答案 0 :(得分:1)
您应该将模式(第二个参数)传递给ofstream的构造函数 (http://www.cplusplus.com/reference/fstream/ofstream/ofstream/) ofstream out(&#34; Foo&#34;,std :: ofstream :: app)
否则每次调用write时文件都会被覆盖。
并发性是一个不同的问题。如果您的问题由具有内在顺序的部分组成,则并发性没有多大意义。