gpt4 book ai didi

c++ - 我可以在单独的线程上刷新我的 ofstream 吗?

转载 作者:行者123 更新时间:2023-11-28 02:31:57 24 4
gpt4 key购买 nike

我有一个在主线程上运行回调的关键进程,我将来自这些回调的各种数据记录到文件中。我不想招致在关键回调期间将输出刷新到文件的性能损失,但我也不能无限期地等待系统决定刷新 ofstream 缓冲区。也就是说,我可以等待几秒钟,而不是几分钟,以查看我的文件监视器中的数据。

我能否只在一个经常刷新 ofstreams 的单独线程上运行一个计时器,或者这不是线程安全的?

或者是否有更好的方法将数据记录到文件,从而最大限度地减少关键线程的负载?

(如果 Boost 提供任何方便的解决方案,我会使用它。)

最佳答案

ofstream is not thread safe ,你必须在刷新它时锁定它,所以性能损失最终是大致相同的(而不是关键回调花时间刷新,他们花时间在一个单独的线程上等待释放锁,而 冲洗)。

“这运行得够快吗?”这个问题的标准答案是“在做大量额外工作之前测量它并找出答案”。您是否测量了性能以确认从您的回调中刷新是一个问题?

如果从回调中刷新是一个问题,那么一种替代方法是使用生产者-消费者队列;回调队列将日志条目写入线程安全队列,而消费者线程锁定队列、弹出条目、解锁队列,然后将条目写入磁盘。

关于c++ - 我可以在单独的线程上刷新我的 ofstream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28756344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com