Я пытаюсь установить имя своих потоков для упрощения профилирования (в ps, top, et c.).
Я обычно использую pthread_setname_np(pthread_self(), <THREAD_NAME>)
, и это работает как шарм.
Но единственное, чего я не могу понять, это как это сделать, когда я использую лямбда-потоки.
Вот пример того, что я пытаюсь сделать.
#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
#include <pthread.h>
int main()
{
// vector container stores threads
std::vector<std::thread> workers;
for (int i = 0; i < 5; i++) {
workers.push_back(std::thread([]()
{
std::cout << "thread function\n";
}));
}
std::cout << "main thread\n";
std::for_each(workers.begin(), workers.end(), [](std::thread& t)
{
//I want to set the thread name for profiling
std::string s = "mythread";
auto handle = t.native_handle();
pthread_setname_np(handle, s.c_str());
t.join();
});
return 0;
}
Это не работает. Если я сделаю top -H -p <pid>
в Linux, я не смогу увидеть названные потоки. Спасибо