获取线程标识函数gettid和pthread_self的区别

本文介绍了Linux中获取线程ID的两种方法:pthread_self和gettid。pthread_self返回POSIX线程ID,是进程内唯一的,而gettid返回系统级别的线程ID,全局唯一。gettid需要通过syscall调用来使用,不包含在glibc中。
摘要由CSDN通过智能技术生成
最近阅读源码时发现了有两种获取线程ID的函数:pthread_self和gettid,前者在Richard的APUE一书中有详尽介绍,但后者函数相对陌生,经过一番查阅后现将这两者在此总结一番。

pthread_self:
pthread_self是POSIX实现的,它返回一个由pthread_t数据类型表示的线程ID,在Linux系统中用无符号整形来表示pthread_t数据类型。
POSIX线程ID的分配和维护是由线程实现决定的,它表示的是同一进程中各个线程的独立标识,所以由pthread_self返回的线程ID仅在其所属的进程上下文中才有意义。另外,由于pthread_t应该被当做不透明的数据(opaque data)类型实现,所以当要比较两个pthread_t时可以调用pthread_equal函数来完成操
pthread_create函数用于创建一个新的线程,其函数原型为: ```c int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ``` 其中,参数thread是一个指向pthread_t类型的指针,用于存储新线程ID;参数attr是一个指向pthread_attr_t类型的指针,用于设置线程的属性,一般为NULL;参数start_routine是一个指向函数的指针,该函数将作为新线程的入口点;参数arg是一个指向void类型的指针,用于传递给start_routine函数的参数。 pthread_self函数用于获取当前线程ID,其函数原型为: ```c pthread_t pthread_self(void); ``` 下面是一个示例程序,演示了pthread_create函数和pthread_self函数的用法和程序的执行顺序: ```c #include <stdio.h> #include <pthread.h> void *thread_func(void *arg) { pthread_t tid = pthread_self(); printf("New thread created with ID %lu\n", tid); return NULL; } int main() { pthread_t tid; printf("Main thread ID is %lu\n", pthread_self()); pthread_create(&tid, NULL, thread_func, NULL); pthread_join(tid, NULL); return 0; } ``` 程序首先输出了主线程ID,然后调用pthread_create函数创建了一个新线程,并将其ID存储在tid变量中。pthread_create函数的第三个参数是一个指向函数的指针,该函数将作为新线程的入口点,这里我们传递了thread_func函数的地址。thread_func函数中调用了pthread_self函数获取当前线程ID,并输出到控制台。最后,主线程调用pthread_join函数等待新线程结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值