我正在使用istream在c ++中读取一个文本文件,我注意到每次读取后istream锁定文件会产生很大的开销(特别是istream get和peek方法)。
如果我理解正确,这种锁定是为了线程安全,但我只打算使用单个线程,所以感觉没必要。
从istream读取时有什么方法可以防止这种线程锁定吗?
提前致谢!
P.S。:我附上了一张VTune结果图像,其中包含了花费时间的概述。
虽然它不受支持,但似乎有一些黑客方法可以做到这一点:
对于char = in.get()或in.get(char&),请使用std::sbumpc。
对于char = in.peek(),请使用std::sgetc。
所以:
// Old:
char c = in.get();
char p = in.peek();
// New:
char c = in.rdbuf()->sbumpc();
char p = in.rdbuf()->sgetc();
请注意,这些方法不是线程安全的,并且不会自动检测eof。仅在性能至关重要时使用,并自行检查。