首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止c++ istream在调用“get”和“peek”时锁定

防止c++ istream在调用“get”和“peek”时锁定
EN

Stack Overflow用户
提问于 2018-09-07 05:19:15
回答 1查看 94关注 0票数 0

我目前正在使用istream读取c++中的一个文本文件,我注意到每次读取后istream锁定该文件会产生很大的开销(特别是istream get和peek方法)。

如果我理解正确,这种锁定是为了线程安全,但我只计划使用单个线程,所以我觉得没有必要。

从istream读取数据时,有没有办法防止这种线程锁定?

提前感谢!

附注:我附上了一张VTune结果图像,其中包含了时间被花费在哪里的概述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-07 08:07:48

虽然它不受支持,但似乎有一些黑客的方式可以做到这一点:

对于char = in.get()或in.get(char&),使用std::sbumpc

对于char = in.peek(),使用std::sgetc

所以:

代码语言:javascript
复制
// Old:
char c = in.get();
char p = in.peek();

// New:
char c = in.rdbuf()->sbumpc();
char p = in.rdbuf()->sgetc();

请注意,这些方法将不是线程安全的,并且不会自动检测eof。只有在性能非常关键的情况下才能使用,并且自己要注意检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52212310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档