目录
一、线程的概念(简单了解即可)
概念对比图
进程 | 线程 |
---|---|
有独立的地址空间 | 同一进程下的线程共享地址空间(相同) |
进程间切换时,对系统消耗大 | 相当于轻量级进程,任务切换效率高 |
-
线程共享资源如下
- 可执行命令
- 静态数据
- 进程中打开的文件描述符
- 当前工作目录
- 用户ID
- 用户组ID
-
线程私有资源(非共享)如下
- 线程ID(TID)
- PC(程序计数器)和相关寄存器
- 堆栈
- 错误号(errno)
- 优先级
- 执行状态和属性
实际上,Linux系统不区分进程、线程,线程需要借助额外库函数实现(pthread,#include<pthread.h>),即Linux内核不提供线程,需由线程库实现。
pthread线程库可提供操作:
- 创建线程
- 回收线程
- 结束线程
- 同步和互斥机制
- 信号量
- 互斥锁
二、 线程的创建
涉及函数
#include<pthread.h>
int pthread_create(pthread_t *thread, const pthread_atte_t *attr, void *(*routine)(void *), void* arg);
该函数成功时返回0,失败时返回错误码
参数含义
thread:线程对象;
attr:线程属性
routine:需要让线程执行的函数
arg:传递给routine的参数(格式为void*,注意传递参数的格式)
注意:
- 主进程一旦退出,它创建的线程也会立刻退出(无论线程是否执行完)。
- 线程创建需要时间,如果主进程马上退出,那线程可能无法被执行。
三、线程的结束
涉及函数
#include <pthread.h>
void pthread_exit(void *retval);