ofstream线程是否安全?

Dip*_*pak 5 c++ multithreading

我正在开发一个程序,它使用多个std::ifstreams来读取二进制文件,std::ifstream每个线程一个.现在我需要知道,如果std::ofstream在Windows和Linux上是线程安全的,那么在同一个文件中写入.我只使用一个std::ofstream并使用多个线程.
我读通过利用每个线程和写作使用的输出文件的块不同的块seekp()write().目前它对我有用,但它是否对大文件有问题.

std::ofstream线程安全的?

Kir*_*rov 8

如果我没有误解你 - 不,标准库中没有任何东西是线程安全的(除了std::thread特定的东西,当然(从C++ 11及更高版本)).您需要其他同步.

更多 - 如果有多个进程,读取/写入这些文件,您需要锁定文件,以同步访问.


Cla*_*dix 6

C++标准(输入/输出库线程安全):

27.1.3线程安全[iostreams.thread-safety]

多个线程并发访问流对象[string.streams,file.streams],流缓冲区对象[stream.buffers]或C库流[c.files]可能会导致数据竞争[intro.multithread],除非另有说明指定[iostream.objects].[注意:数据竞争导致未定义的行为[intro.multithread].