MAC OS 的mach_port_t和pthread_self()

本文介绍了MACOS系统中线程标识符的三种形式:glibc库的pthread_self()、内核级gettid以及特有的mach_port_t。并讨论了如何在不同线程ID间进行转换及遇到的一些常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MAC OS 三种 线程

1.pthread_self()
glibc库的线程id。实际上是线程控制块tcb首地址。

2.gettid:
内核级线程id,系统唯一。
该函数为系统调用函数,glibc可能没有该函数声明。
此时需要使用 syscall(SYS_gettid);

3.mach_port_t:
mac os特有的id。实际上不能说是thread id,而应该当做是端口。
参考http://fdiv.net/2011/01/14/machportt-inter-process-communication

task_threads获取性能遇到的坑

性能获取参考http://www.cocoachina.com/ios/20170629/19680.html
其中thread_Info()接口可以获取threadId。而获取到的threadId 类型是mach_port_t

我们有个需求,需要获取线程的名称,使用pthread_getname_np()接口。
而该接口参数是pthread_self()的threadId。
所以我们要把mach_port_t转化为pthread_t

pthread_from_mach_thread_np() // mach_port_t --> pthread_t
pthread_mach_thread_np() // pthread_t --> mach_port_t 

thread setname的坑

线程调用pthread_setname_np函数,一定要在新的线程中调用。因为此函数是对当前线程设置名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值