MAC OS 的mach_port_t和pthread_self()

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函数,一定要在新的线程中调用。因为此函数是对当前线程设置名字。

猜你喜欢

转载自blog.csdn.net/yxccc_914/article/details/79854603
今日推荐