我目前正在调试多线程应用程序(Linux ia64,ARM下的pthread)。 valgrind,helgrind和gdb是我目前使用的工具。
存在一些同步问题,为了以后进行分析, 我想将线程执行记录到一个或多个文件中。
天真的实现会做一些write / fprintf,这可能 (取决于libc的实现)锁定一些内部互斥锁。 反过来会影响程序的行为 (我称其为“意外锁定”) 因此是不可接受的。
搜索互联网只会产生逆解, 即如何同步线程如何记录。 注意:第三方日志记录库倾向于保证多线程安全 但并非相反。
所以我想出了将日志条目不同步地缓存在内存中的方法, ,并在程序退出时将其刷新到文件中。
我想对于许多开发人员来说这是一个普遍的问题, 我想知道是否有更好的方法。 有什么建议吗?
答案 0 :(得分:1)
现代的多线程安全高性能记录器通常:
snprintf
或发出日志消息的线程中发生任何其他格式化。例如。日志消息是格式字符串和参数的副本(格式字符串可以浅复制)。