美文网首页
Linux C++ 获取线程标识

Linux C++ 获取线程标识

作者: kuxingseng686 | 来源:发表于2023-02-22 15:20 被阅读0次

在 Linux C++ 网络编程中,经常会使用到线程的标识,下面整理了常用的获取线程标识的方法:

1、gettid

获取内核线程的 ID, 当只有一个线程时得到的是进程的 pid,和使用 getpid 获取的结果相同。

#include <sys/types.h>
pid_t gettid(void);

此方法在 glibc 中并没有封装,需要使用 syscall 系统调用封装

#include <sys/types.h>
#define gettid() syscall(_NR_gettid)

2、pthread_self

获取的是线程 ID ,线程ID在某个进程中是唯一的,在不同进程中创建的线程可能 ID 相同, 所以此方法获取的 ID 也不是全局唯一的;

#include <pthread.h>
pthread_t pthread_self(void);

3、syscall

在内核中每个线程都有自己的 pid,要想得到线程的 pid,必须用系统调用,通过此方法获取的标识是唯一的;

在 muduo 中 ,为了减少系统调用开销,会将系统调用获取的线程 ID 缓存起来( t_cachedTid 是线程局部存储 __thread):

//获取线程id
pid_t gettid()
{
  return static_cast<pid_t>(::syscall(SYS_gettid));
}

//将线程id缓存起来
//t_cachedTid是线程局部存储  __thread
void CurrentThread::cacheTid()
{
  if (t_cachedTid == 0)
  {
    t_cachedTid = detail::gettid();
    int n = snprintf(t_tidString, sizeof t_tidString, "%5d ", t_cachedTid);
    assert(n == 6); (void) n;
  }
}

4、c++11

c++11中获取线程id的方法

#include <thread>
std::this_thread::get_id();

相关文章

  • Linux c++ 获取线程标识的 4 种方法

    在 Linux C++ 网络编程中,经常会使用到线程的标识,下面整理了常用的获取线程标识的方法: 1、gettid...

  • 多线程编程

    参考:C++ 并发编程 线程 windsows多线程 new thread(...) linux 多线程: pth...

  • 进程管理

    进程管理进程和线程图形简单解释进程和线程管理VIM编辑Linux 系统资源信息的获取获取 Linux CPU 信息...

  • c++操作系统类编程 - read list

    Concurrency C++ in Action Linux多线程服务端编程:使用muduo C++网络库 现代...

  • 三、linux中pthread_join()与pthread_d

    关于线程用法可以参考这些文章一、Linux中 C/C++线程使用[https://www.jianshu.com/...

  • 四、linux中pthread_cond_wait()与pthr

    关于线程用法可以参考这些文章 一、Linux中 C/C++线程使用[https://www.jianshu.com...

  • Android 多线程

    目录 AsyncTask使用和源码分析: 线程同步-锁: linux c/c++多线程看了肯定懂: 正文 一 多线...

  • task_struct结构

    进程标识符(PID) Unix系统通过pid来标识进程,linux把不同的pid与系统中每个进程或轻量级线程关联,...

  • 多线程API

    获取线程的线程id 在每一个线程都会有唯一标识的线程ID,在线程环境之下,线程ID是唯一的,如果在整个系统中线程I...

  • 技术学习方法论

    C++: 如何看懂《Linux多线程服务端编程——使用muduoC++网络库》于洋的回答

网友评论

      本文标题:Linux C++ 获取线程标识

      本文链接:https://www.haomeiwen.com/subject/kcuakdtx.html