互斥锁 操作读写文件 范例
时间: 2024-09-25 12:03:34 浏览: 35
互斥锁(Mutex)是一种同步原语,用于保护共享资源免受并发访问时可能出现的竞态条件。在操作读写文件这样的场景中,尤其重要,因为文件是一个不可变的数据结构,如果多个线程同时尝试读写,可能会导致数据混乱。
例如,在C++中,使用`std::mutex`来管理文件操作:
```cpp
#include <fstream>
#include <thread>
#include <mutex>
std::mutex file_mutex; // 创建一个全局的互斥锁
void readFile(const std::string& fileName) {
std::lock_guard<std::mutex> lock(file_mutex); // 获取锁前进入临界区
std::ifstream file(fileName);
if (file.is_open()) {
// 读取文件内容
std::string content;
std::getline(file, content);
// 处理内容...
file.close();
} else {
std::cerr << "Failed to open file." << std::endl;
}
}
void writeFile(const std::string& fileName) {
std::lock_guard<std::mutex> lock(file_mutex); // 获取锁前进入临界区
std::ofstream file(fileName);
if (file.is_open()) {
// 写入文件内容
file << "Writing new data...\n";
file.close();
} else {
std::cerr << "Failed to create file." << std::endl;
}
}
int main() {
std::thread reader_thread(readFile, "example.txt");
std::thread writer_thread(writeFile, "example.txt");
reader_thread.join(); // 等待读者完成
writer_thread.join(); // 等待作家完成
return 0;
}
```
在这个例子中,`file_mutex`确保了任何时候只有一个线程可以执行写入操作,而其他线程只能在写入者完成之后再进行读取。这样就维护了文件内容的一致性。
阅读全文