linux 线程创建 pthread_create函数 获取线程id
函数原型:
#include<pthread.h>
int pthread_create(pthread_t*thread,pthread_attr_t *attr,
void * (*start_routine)(void *arg), void *arg);
参数
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的地址。
最后一个参数是运行函数的参数。
返回值:
若成功则返回0,否则返回出错编号
代码:
#include <stdio.h>
#include <pthread.h>
#include <sys/syscall.h>void* Func_pth1()
{printf("child gettid = %u\n", syscall(SYS_gettid)); printf("child pthread_self= %u\n", (unsigned int)pthread_self());//printf("child thread tid = %u\n", pthread_self());
}int main()
{int iRet = 0;pthread_t pth1;printf("main gettid = %u\n", syscall(SYS_gettid)); printf("main pthread_self = %u\n", (unsigned int)pthread_self()); iRet = pthread_create(&pth1, NULL, (void*)Func_pth1, NULL);if(iRet){printf("create pthread fail\n");}printf("---pthread_t = %u\n", (unsigned int)pth1);pthread_join(pth1, NULL);return 0;
}
运行结果:
main gettid = 5100
main pthread_self = 3078461120
---pthread_t = 3078458224
child gettid = 5101
child pthread_self= 3078458224
分析:
1 pthread_self()是POSIX的实现,它的返回值是pthread_t,pthread_t在linux中实际是无符号长整型,即unsigned long。gettid是系统调用,它的返回值是pid_t,在linux上是一个无符号整型。但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取。
2 pthread_self是为了区分同一进程中不同的线程, 是由thread的实现来决定的。pthread_self返回的是同一个进程中各个线程之间的标识号,对于这个进程内是唯一的,而不同进程中,每个线程返回的pthread_self可能返回的是一样的。而gettid获取的线程id和pid是有关系的,因为在linux中线程其实也是一个进程(clone),所以它的线程ID也是pid_t类型。在一个进程中,主线程的线程id和进程id是一样的,该进程中其他的线程id则在linux系统内是唯一的,gettid是不可移植的。
3 Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。
有时候我们可能需要知道线程的真实pid。比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。
linux 线程创建 pthread_create函数 获取线程id相关推荐
- linux编程之pthread_create函数
linux编程之pthread_create函数UNIX环境创建线程函数, 具体格式: #include<pthread.h> int pthread_create(pthread_t * ...
- Linux pthread_self和pthread_create函数
pthread_self和pthread_create函数 头文件 #include <pthread.h> 函数原型 pthread_t pthread_self(void); int ...
- Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)
对比 进程 线程 fork pthread_create exit (10) pthread_exit (void *) wait (int *) pthread_join (,void **)阻塞 ...
- C语言多线程教程(pthread)(线程创建pthread_t,指定线程run方法pthread_create,加mutex锁,解锁,伪共享 false sharing【假共享】)
[C语言]多线程程序入门教程 文章目录 查看pthread_create()函数文档 · Demo1 单线程(创建线程pthread_t .创建线程run方法pthread_create) · Dem ...
- 线程创建 pthread_create 中自定义参数注意事项
2019独角兽企业重金招聘Python工程师标准>>> 1. 函数原型 int pthread_create(pthread_t *thread, const pthread_att ...
- C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )
一. 概述 在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作.对于不同的应用场景,使用的策略也不尽相同. 1. 后台循环任务,少量UI更新:例如批量上传文件,并提供进度.这种 ...
- 在微信公众平台上创建模版并获取模版 ID。 调用模版消息接口,发送模版消息。 代码如下:...
好的,我会尽力帮你. 首先,要在微信公众平台上创建模板,你需要先登录你的微信公众平台账号,然后依次点击"消息推送"."模板消息"."添加模板" ...
- linux线程随笔-pthread_create函数
函数简介 pthread_create是UNIX环境创建线程函数 头文件 #include<pthread.h> 函数声明 int pthread_create(pthread_t *r ...
- Linux 如何创建进程函数与查看进程
进程创建函数 进程就是pcb,意味着创建一个进程,就是创建一个pcb pid_t fork(void) –通过复制调用进程(父进程)创建一个新的进程(子进程) 创建一个新的pcb,然后从父进程pcb中 ...
最新文章
- pandas统计缺失值的个数
- java子网划分_子网划分讲解及练习(二)
- Keras版Sequence2Sequence对对联实战——自然语言处理技术
- 在 JavaScript 中创建 JSON 对象
- MySQL 面试必备 8 个知识点
- js apply/call/caller/callee/bind使用方法与区别分析
- sys.path.append 和 sys.path.insert辨析
- Xshell Xftp 免费版申请 官方正版 | 无需破解
- 2022华为杯 E 题 数学建模思路分享
- 计算机的键盘怎么找出来,电脑的键盘隐藏了怎么办
- 一只小野鸭的超能量(超有启发性)
- cmake简洁教程 - 第五篇
- java 307跳转_GitHub - yy307/java-weixinlib: 微信公众平台接入
- 尚医通(二十五)就医提醒和预约统计
- 农村将迎来重大爆发!传统农业链条正在重塑,关键一步已经迈出
- java 批次号,java重复批次执行
- 三国刘备十大名言:三分天下要靠“混
- 【JAVA项目实战】【图书管理系统】用户查询功能【Servlet】+【Jsp】+【Mysql】
- Como fazer uma要求GET de uma API REST em Java e转换器JSON em um objeto
- 【高数】高数第四章节——不定积分换元积分分部积分
热门文章
- (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>
- python 中iloc_使用DataFrame存取器iloc[]
- 程序员的多种网赚创富方法
- linux命令chgrp,Linux命令Chgrp 详解
- 智能网联精准公交解决方案白皮书发布,希迪智驾与腾讯开启战略合作(附下载)...
- mysql ver 14.14下载_MySQL简介及安装 mysql Ver 14.14 Distrib 5.7.28
- 建群网培PMP每日一练2020-8-6
- MySQL时间格式化date_format
- 16进制颜色值 与 rgb颜色值转换
- 高性能msyql读书日志