Linux线程标识获取

线程唯一标识

在Linux系统中,线程标识一般是用于唯一标识一个线程的数字,其对于操作系统管理和用户程序都有重要的用途,如日志记录中记录线程ID有助于快速定位哪写线程产生了错误或者警告的信息,同时也便于运维和监控程序。实际开发中,我们有多种方式来获取线程标识。

pthread_self

POSIX threads 提供了 pthread_self 来获取当前线程的标识符,其返回值为pthread_t。但是pthread_t 的值仅在进程内有意义,同一时刻的不同进程之间的 pthread_self 值可能是相同的,无法做到全局唯一。 而且哪怕对于单一进程来言,先执行线程A,等A执行完毕后立刻执行线程B,两个线程很可能获取到相同的线程标识,其值很有可能会重复。

syscall(SYS_gettid)

在Linux系统中,更加常见的方式是使用 gettid() 系统调用来获取线程的唯一标识,不过 glibc 并没有实现这个系统调用,不过这不是问题,我们可以自己封装一个,如下:

    pid_t gettid(){
        return syscall(SYS_gettid);
    }

该系统调用的返回值为 pid_t, 其值一般为一个小整数,它直接代表着内核的任务调度id, 该标识是全局唯一的,多个进程中的不同线程的标识也是唯一的,且 pid_t 的分配方式为轮询分配,短时间启动销毁的多个线程也会获取到不同的标识。

std::this_thread::get_id()

如果你是C++开发者,可能还见过 std::this_thread::get_id(),使用时需要包含头文件 < thread> 。这个函数提供了C++标准库级别的线程ID,可以很好和C++的 std::thread 库配合,但是很不幸,std::thread::get_id()的值也是进程内有效的,如果你没有跨进程唯一线程标识的需求,使用该函数也是很不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值