4.9一个线程写文件,另一个线程读文件(使用 mutex)

#include <iostream>
#include <fstream>
#include <thread>
#include <mutex>
#include <chrono>

std::mutex file_mutex;
const std::string filename = "data.txt";

void writeToFile() {
    std::lock_guard<std::mutex> lock(file_mutex);
    std::ofstream outFile(filename);
    if (outFile.is_open()) {
        outFile << "42\n";
        outFile << "99\n";
        outFile << "1337\n";
        std::cout << "[Writer] Done writing to file.\n";
    } else {
        std::cout << "[Writer] Failed to open file.\n";
    }
}

void readFromFile() {
    // 等一会儿,确保写线程先运行
    std::this_thread::sleep_for(std::chrono::milliseconds(200));

    std::lock_guard<std::mutex> lock(file_mutex);
    std::ifstream inFile(filename);
    if (inFile.is_open()) {
        std::string line;
        std::cout << "[Reader] Reading from file:\n";
        while (std::getline(inFile, line)) {
            std::cout << "  > " << line << std::endl;
        }
    } else {
        std::cout << "[Reader] Failed to open file.\n";
    }
}

int main() {
    std::thread writer(writeToFile);
    std::thread reader(readFromFile);

    writer.join();
    reader.join();

    return 0;
}
posted @ 2025-04-09 22:37  五冬夜  阅读(22)  评论(0)    收藏  举报