文章目录
- 2查看线程
- 3操作函数
- 4多进程和多线程的区别
- 5线程属性
1.1什么是线程
线程是比进程更小的能独立运行的基本单位,线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如线程ID,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源(除了栈)。
- 其实在linux下
- 线程就是进程–轻量级进程
- 对于内核来说,线程就是进程
1.2线程生成图
1.3主进程和子进程共享
-
除了栈以外,基本都共享
-
不共享的栈区,如果线程有5份 栈区被平分了5份,保证了,每个线程都有自己独立的栈,
-
通信:全局变量,推。
2查看线程
- 命令
命令 | 含义 |
---|---|
ps -T -p | -T开启线程查看 |
top -H -p | -H开启线程查看 |
- 文件
No. 文件 | 含义 |
---|---|
/proc/{PID}/task/ | 线程默认的名字和进程名相同 |
/proc/{PID}/task/{tid}/comm | 线程名 |
3操作函数
3.1线程标识pthread_t pthread_self(void)
-
返回值
当前线程的线程ID (线程ID打印使用%lu)
3.2线程名字int prctl(int option, unsigned long arg2)
3.2参数
参数 | 含义 |
---|---|
option | PR_GET_NAME:获得当前线程的名字;PR_SET_NAME:设置当前线程的名字 |
arg2 | 线程名的长度最大为15字节,且应该以’\0’结尾 |
3.3返回值
返回值 | 含义 |
---|---|
0 | 成功 |
非0 | 出错 |
3.3pthread_create
3.3.1函数原型
int pthread_create(pthread_t *thread, //线程ID(无符号长整形)
const pthread_attr_t *attr,//线程属性 一般为NULL
void *(*start_routine) (void *), //线程处理函数
void *arg);//线程处理函数参数
3.3.2返回值
- 如果成功返回0失败返回错误号
- 线程中,perror()不能使用该函数打印错误信息
if(ret!=0){
printf("error number:%d\n",ret);
//打印错误信息
pruntf("%s\n"