如何设置 "this" 线程的自定义名称?

How to set custom name of "this" thread?

我想在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 本机句柄,然后可用于设置自定义线程名称?

除非需要可移植性,并且目标只是具有 POSIX 个线程的 POSIX 系统,否则可以使用 pthread_self.

轻松获得 ID

为了方便复制粘贴,我粘贴了一个额外的答案:

pthread_setname_np(pthread_self(), "Specific name");