在linux里面是没有实际的线程的结构,但是在linux里面为了描述线程,将进程分为很多的轻量级进程,这些轻量级的进程被称之为线程。
两个区别:
- 进程是系统分配资源的基本单位
线程是系统调度的基本单位
由于线程在进程的内部运行,那么在创建一个线程的时候需要资源和操作相对于创建进程要少的多。
创建进程的过程:
- 申请空白PCB
- 为新进程分配资源
- 初始化进程控制块
将新创建的进程加入到就绪队列
创建的线程只是进程的一部分,那么在资源上面空想进程的资源,包括地址空间,页表,文件描述符等等。
但是每一个线程也有只属于自己的信息:- 线程ID
- 一组寄存器值
- 设备上下文信息(重要)
- 栈空间(重要)
- 调度的优先级
- errno变量
- 私有局部变量
创建线程:
int pthread_create(pthread_t *thread tidp, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
tidp:存储创建线程的ID
attr:订制各种不同的线程属性
start_routine:线程执行的开始地址
arg:start_routine函数的参数
获取当前线程的ID:
pthread_t pthread_self(void);
函数调用成功返回当前线程的ID,失败返回-1。
线程的终止:
在进程里面如果需要将进程终止,那么可以调用exit(),_exit或者_Exit()等函数来是进程终止。但是如果使用函数使进程退出,那么所有的线程也将退出(线程共享进程的资源,当进程退出的时候就会将进程的所有资源金子那个释放),那么这样就没有达到我的线程终止的目的。
void pthread_exit(void *retval);
函数调用成功线程退出。
在创建线程的时候会使用到POSIX库,在编译的时候需要需要加上-lpthread