Как установить имя потока с помощью лямбда-выражений std :: thread в C ++ - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь установить имя своих потоков для упрощения профилирования (в 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, я не смогу увидеть названные потоки. Спасибо

...