微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ - 以面向性能的方式读取日志级别

如何解决C++ - 以面向性能的方式读取日志级别

logger 组件是一个静态库。应用程序(服务)加载大约 20 个 DLL。应用程序和 DLL 与静态记录器库链接。还有其他应用程序 (UI/CLI) 可以更新 Windows 上共享内存中的日志级别。

主应用程序和 DLL 从共享内存中读取日志级别并决定是否记录特定的日志语句。读取日志级别受命名互斥锁保护,这会带来巨大的性能损失。

使阅读日志级别轻量化的最佳方法是什么。

解决方法

就像@rustyx 建议的那样,使用 std::atomic<> 可能是您的最佳选择。缓存一致性协议会为您处理同步,而且速度会尽可能快,而无需您自己监控更改。

几点:

  • 使其尽可能小,例如使用 atomic_uchar
  • 通过 is_lock_free() 方法验证实现是无锁的。
  • 验证它是无地址的,因为您需要将它保存在共享内存中(请查看您的编译器或标准库的文档)。

否则,如果 1. 原子开销对你来说太大,2. 日志级别几乎从不改变,3. 你不介意改变后的小“延迟”,那么你可以创建一个本地副本并拥有您每隔“一段时间”监视一次更改的事件队列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。