I am working on a program, which uses multiple std::ifstream
s for reading a binary file, one std::ifstream
for each thread. Now I need to know, if std::ofstream
is thread-safe on Windows and Linux for writing in a same file. I am using using only one std::ofstream
and using for multiple threads.
I am reading different blocks using using each thread and writing those block in output file using seekp()
and write()
. Currently it is working for me but whether it is problematic for big files.
Is std::ofstream
thread safe?
From C++ standards (Input/Output Library Thread Safety):
27.1.3 Thread safety [iostreams.thread-safety]
Concurrent access to a stream object [string.streams, file.streams], stream buffer object [stream.buffers], or C Library stream [c.files] by multiple threads may result in a data race [intro.multithread] unless otherwise specified [iostream.objects]. [Note: Data races result in undefined behavior [intro.multithread].