Jos*_*ley 5 c c++ file-io multithreading
在对我们的应用程序中的一些性能问题进行故障排除时,我发现C的stdio.h功能(至少对我们的供应商来说,C++的fstream类)是线程安全的.因此,每次我做一些简单的操作时fgetc,RTL必须获取锁,读取一个字节并释放锁.
这对性能不利.
在C和C++中获取非线程安全文件I/O的最佳方法是什么,这样我可以自己管理锁定并获得更好的性能?
_fputc_nolock,和GCC提供unlocked_stdio和flockfile,但我无法找到我的编译器(CodeGear的C++ Builder的)任何类似的功能.其他人如何处理这个问题?
编辑:由于有些人想知道,我在发布前测试了这个. fgetc如果它可以满足从其缓冲区读取的数量,它不会进行系统调用,但它仍然会进行锁定,因此锁定会占用大量的时间(从磁盘读取的单个数据块需要数百个锁来获取和释放) .不做一次一个字符I/O将是一个解决方案,但fstream不幸的是C++ Builder的类使用fgetc(所以如果我想使用iostream类,我会坚持使用它),并且我有很多遗产使用fgetc和朋友从记录样式文件中读取字段的代码(如果不是锁定问题,这将是合理的).