我的应用程序有一个日志包装类和宏,如 LOG_DEBUG(message)、LOG_ERROR(message) 等。例如,当我使用 LOG_DEBUG(message) 时,它会打印时间、消息和代表调试的字母 D。我想做的是向宏添加打印执行 LOG 命令的线程 ID 的功能。起初我添加syscall(SYS_gettid)
到日志包装类,这工作正常,我的问题是,我可以在没有系统调用的情况下做到这一点吗?
我虽然关于使用线程本地存储将线程ID存储在用户空间中,但我想知道是否有其他我没有想到的方法。
在试图弄清楚它时,我注意到通过使用strace
它来获得我实际调用系统调用的时间,因此对于每个日志,我都会得到一个上下文切换。我想不出一种方法来规避这个问题,但我想知道通过系统调用获取线程 id 所花费的时间是否与获取系统时间大致相同、更多或大致相同。