C++实现文件的线程安全操作
时间: 2024-05-04 22:19:28 浏览: 99
在C++中实现文件的线程安全操作可以使用互斥锁(mutex)来保证同一时间只有一个线程对文件进行读写操作。下面是一个简单的例子:
```c++
#include <iostream>
#include <fstream>
#include <mutex>
std::mutex mtx;
void writeToFile(std::string filename, std::string content) {
std::ofstream file(filename, std::ios_base::app);
if (file.is_open()) {
mtx.lock();
file << content << std::endl;
mtx.unlock();
file.close();
}
}
std::string readFromFile(std::string filename) {
std::ifstream file(filename);
std::string content;
if (file.is_open()) {
mtx.lock();
std::getline(file, content);
mtx.unlock();
file.close();
}
return content;
}
int main() {
std::thread t1(writeToFile, "test.txt", "Hello World!");
std::thread t2(writeToFile, "test.txt", "I am a programmer.");
t1.join();
t2.join();
std::cout << readFromFile("test.txt") << std::endl;
return 0;
}
```
在这个例子中,我们使用了`std::mutex`来保护文件的读写操作。在写入文件时,我们先获取锁,写入完成之后再释放锁;在读取文件时,我们也先获取锁,读取完成后再释放锁。这样可以保证同一时间只有一个线程对文件进行读写操作,避免了线程之间的竞争和冲突。
阅读全文