【问题标题】:getting thread name from thread id using posix api使用posix api从线程ID获取线程名称
【发布时间】:2011-07-02 02:28:18
【问题描述】:

我有一个要求,我必须从线程 ID 获取线程名称,或者如果这不可能,如何获取线程名称。这里我不是创建线程。我正在创建库,并且该库由应用程序使用,并且库代码将在应用程序线程上下文中运行,我想在控制台日志中打印线程名称以知道该日志正在发送该特定线程。这应该使用 posix api 来实现,因此它应该是可移植的。

在此先感谢大家的投入

【问题讨论】:

    标签: c++ posix


    【解决方案1】:

    没有将名称附加到线程的 POSIX api。

    在 Linux 上,您可以使用 prctl(PR_SET_NAME, ...)。见man prctl

    【讨论】:

      【解决方案2】:

      据我所知,posix 线程没有名称,但您可以使用TLS 来存储名称。示例见here(不带字符串)。

      【讨论】:

      • 无论如何,这不会有助于当前线程的名称吗?
      【解决方案3】:

      没有这样的事情。但是除了 thread id 之外,还有一些信息可能有助于添加到您的日志中,例如调用时间、源代码的 文件名执行调用的行号

      【讨论】:

      【解决方案4】:

      我已经在pthread.h 中看到pthread_getname_np()pthread_setname_np(),分别获取和设置线程的显示名称。但是,它被条件包围,表明它是一个非标准的 GNU 扩展。

      您可能想要检查您正在编译的pthread.h 并查看函数是否已定义。如果您的代码需要可移植,请务必将这些调用包含在条件中。

      【讨论】:

        猜你喜欢
        • 2010-12-13
        • 2013-02-28
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2011-06-08
        • 1970-01-01
        相关资源
        最近更新 更多