std::thread的接口使用

std::thread 类的 joinable() 函数用于判断一个 std::thread 对象是否是一个可连接的(joinable)线程。如果 std::thread 对象是可连接的,则该函数返回 true,否则返回 false。

一个 std::thread 对象是可连接的,当且仅当它所表示的线程正在运行且尚未被连接过(调用过 std::thread::join() 或 std::thread::detach() 函数)。如果一个 std::thread 对象表示的线程已经结束运行,则该对象就不再是可连接的,此时 joinable() 函数会返回 false。

std::thread 类的 join() 函数用于等待一个 std::thread 对象所表示的线程结束运行。如果该线程已经结束运行,则调用 join() 函数无效。如果 std::thread 对象是可连接的,则调用 join() 函数会使当前线程(调用 join() 的线程)挂起(阻塞在这里),直到 std::thread 对象所表示的线程结束运行为止。

std::thread t(some_function);
if (t.joinable())
{
    
    
t.join();
}

那么在这里,先调用了 joinable() 函数来判断 t 是否是可连接的,如果是,则调用 join() 函数来等待 t 结束运行。

使用 “pthread_setname_np” 函数来给 std::thread 线程起名字。

例如,你可以使用以下代码来给 std::thread 线程起名字:
#include <pthread.h>
#include

void thread_func() {
// Your code here
}

int main() {
std::thread t(thread_func);
pthread_setname_np(t.native_handle(), “MyThread”);
t.join();
return 0;
}

在终端中输入 “top” 命令,然后按 “Shift + h” 键可以查看所有线程的信息。其中,“%CPU” 列就是每个线程花费的 CPU 时间的百分比。你可以在线程名前加一个 “grep” 命令来过滤线程信息,例如:

top -H | grep MyThread

注意:“top” 命令都需要 root 权限才能查看所有线程的信息。

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/128478477