如何同时写入单个文件

How can I write to a single file concurrently?

本文关键字:单个 文件 何同时      更新时间:2023-10-16

假设我有两个文件要读取。如何将每个文件的文件内容同时写入另一个文件?目前,我正在将每个文件的内容读取到向量中并在读取部分周围放置锁,但是当我在写入过程中执行类似操作时,我只能看到输出文件中其中一个文件的内容。

我正在使用 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 时,文件都会被覆盖。

并发性是一个不同的问题。如果问题由固有的顺序部分组成,则并发性没有多大意义。