【发布时间】:2011-07-02 02:28:18
【问题描述】:
我有一个要求,我必须从线程 ID 获取线程名称,或者如果这不可能,如何获取线程名称。这里我不是创建线程。我正在创建库,并且该库由应用程序使用,并且库代码将在应用程序线程上下文中运行,我想在控制台日志中打印线程名称以知道该日志正在发送该特定线程。这应该使用 posix api 来实现,因此它应该是可移植的。
在此先感谢大家的投入
【问题讨论】:
我有一个要求,我必须从线程 ID 获取线程名称,或者如果这不可能,如何获取线程名称。这里我不是创建线程。我正在创建库,并且该库由应用程序使用,并且库代码将在应用程序线程上下文中运行,我想在控制台日志中打印线程名称以知道该日志正在发送该特定线程。这应该使用 posix api 来实现,因此它应该是可移植的。
在此先感谢大家的投入
【问题讨论】:
没有将名称附加到线程的 POSIX api。
在 Linux 上,您可以使用 prctl(PR_SET_NAME, ...)。见man prctl。
【讨论】:
没有这样的事情。但是除了 thread id 之外,还有一些信息可能有助于添加到您的日志中,例如调用时间、源代码的 文件名 和 执行调用的行号。
【讨论】:
我已经在pthread.h 中看到pthread_getname_np() 和pthread_setname_np(),分别获取和设置线程的显示名称。但是,它被条件包围,表明它是一个非标准的 GNU 扩展。
您可能想要检查您正在编译的pthread.h 并查看函数是否已定义。如果您的代码需要可移植,请务必将这些调用包含在条件中。
【讨论】: