【问题标题】:How to set custom name of "this" thread?如何设置“this”线程的自定义名称?
【发布时间】:2019-12-19 23:16:18
【问题描述】:

我想在C++代码中设置当前执行线程的名称;底层线程库是 pthreads。

如果我有线程的 std::thread 句柄,我可以使用 std::thread::native_handle 获取本机 pthreads 句柄,然后将其传递给 pthread_setname_np 以设置线程名称。

    auto t = std::thread(call_from_thread);
    pthread_setname_np(t.native_handle(), my_thread_name.c_str());

但是在我没有可用的std::thread 句柄的情况下如何设置线程名称。例如,当线程由其他库启动时,我正在编写将由该线程执行的回调,我可以在回调中编写一些代码,为执行它的线程设置自定义名称吗?

我知道我可以使用std::this_thread::get_id 获取当前线程std::thread::id 对象。有没有办法将其转换为 pthread 本机句柄,然后可用于设置自定义线程名称?

【问题讨论】:

  • stackoverflow.com/questions/21091000/… 然后你可以将线程句柄传递给pthread_getname_np
  • 在 Windows 中,你有 this
  • 如果您不关心可移植性并且正在使用(不可移植的)POSIX 线程调用,为什么不简单地使用pthread_self
  • @Someprogrammerdude 这应该是一个答案。他们在native_handle 示例中解决类似情况的方式几乎相同。
  • 有一个关于获取当前线程句柄的 LWG 问题,解决方案很简单,但没有达成共识:cplusplus.github.io/LWG/issue2379

标签: c++ multithreading pthreads stdthread


【解决方案1】:

除非需要可移植性,并且目标只是具有 POSIX 线程的 POSIX 系统,否则可以通过 pthread_self 轻松获得 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2014-10-13
    • 1970-01-01
    • 2010-10-28
    相关资源
    最近更新 更多