C++ 设置 std::thread 线程名称

作者: , 共 584 字 , 共阅读 0

有两种方法,一种在线程的调用函数内部设置,还有一种是在外部对指定线程变量做设置。

#include <thread>
#include <pthread.h>

int main() 
{
    std::thread _([]() {
        std::string name = "abccccccccccccc";

        // 意设置的线程名字不能超过15个字符。
        pthread_setname_np(pthread_self(), name.substr(0, 15).c_str()); 

        // other works
    });

    std::thread t([]() {
        // other works
    });

    std::string name = "xxxxxxxxxxxxxxxxxx";
    pthread_setname_np(t.native_handle(), name.substr(0, 15).c_str()); 

    return 0;
}

为线程设置名字之后最大的好处是,程序出错在 GDB 的出错信息里,可以看到有意义的线程名称,从而更快地定位问题。

Q. E. D.

类似文章:
std::thread是 C++ 11 新引入的标准线程库。在同样是 C++ 11 新引入的 lambda 函数的辅助下,std::thread用起来特别方便:
编程 » C++
要在C++中运行系统命令,可以直接使用std::system函数:
看到网上有片段,提到没有必要自己实现自旋锁,因为标准库的 std::mutex 和现在的自旋锁的实现没有两样。比较好奇,翻了一些资料,试图找到答案。
编程 » C++, 异步
C++11 的标准异步库至少包含下面内容:
编程 » Python, 并行计算
核心就是threading.Thread
编程 » C++
如果我们用std::getline或者简单的std::cin >>获取用户输入,有一个问题是,它会阻塞掉整个程序,用户必须有输入后才能继续执行。如果这个输入是单独的线程,它还会阻止整个程序的退出。
获取程序占用的内存量,是一个诡异的需求。但程序写多了,有时候还真需要,尤其是代码运行出现问题的时候。
编程 » C++, 智能指针
理论上而言,当 C++提供了std::unique_ptr, C++的程序就不应该出现普通指针了。所有普通指针都可以用std::unique_ptr代替,避免手动删除对象。
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
编程 » C++, popen
popen函数可以获取比std::system函数更详细的程序输出。只是正常调用 popen 只能获取 stdout 的输出,而 stderr 的输出被忽略。
编程 » Python
Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:
编程 » Python, numpy
numpy 的一维向量: