一,线程定义及特征
1.概念:Linux中,线程是轻量级的进程,其属于某个进程。
2.特征:
进程是系统中最小的资源分配单位。
线程是系统中最小的执行单位。
进程中,线程与线程是平级关系。
在进程中,默认有一个主线程。
二,与线程的区别
| 线程 | 进程 |
| 资源可共享 | 资源独立 |
| 不稳定(一个线程崩溃,整个进程崩溃) | 相对稳定 |
| 线程创建需在进程空间中(8MB) | 需3GB空间 |
| 并发度高 | 相较线程低 |
三,线程编程步骤
创建多线程 ->线程空间操作->线程资源回收(线程退出后,默认栈区不释放)
相关函数
1.线程的创建: pthread_create
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);功能:可以创建一个线程。
参数:
thread 线程id,需要实现定义并由该函数返回。
attr 线程属性,一般是NULL,表示默认属性。
start_routine 指向指针函数的函数指针。
本质上是一个函数的名称即可。称为th回调函数,是线程的执行空间。
arg 回调函数的参数,即参数3的指针函数参数。
返回值:成功 0 ;失败 错误码
2.id号的获取:pthread_t pthread_self(void)
pthread_t pthread_self(void); unsigned long int; %lu功能:获得当前线程的id
3.退出线程:(1)pthread_exit
void pthread_exit(void *retval); exit return p;功能:子线程自行退出
参数:
retval 线程退出时候的返回状态。
无返回值。
(2)pthread_cancel
int pthread_cancel(pthread_t thread)功能:请求结束一个线程
参数:thread 请求结束一个线程tid。
返回值:成功 0 ;失败 非0值;
4.线性空间的回收:pthread_join
int pthread_join(pthread_t thread, void **retval)功能:通过该函数可以将指定的线程资源回收,该函数具有阻塞等待功能,如果指定的线程没有结
束,则回收线程会阻塞。
参数:thread 要回收的子线程tid
retval 要回收的子线程返回值/状态。ptread_exit(值);
返回值:成功 0 ;失败 非0值
四,分离属性
给某个线程设置的属性,如果线程设置了这个属性,那么,线程在退出后,相关资源(栈区)会
被系统回收,原来创建者,就不能回收了。目的线程消亡,自动回收空间。
函数:pthread_deatch
int pthread_deatch(pthread_t thread);功能:设置分离属性
参数:线程id号,填自己的id
返回值:成功 0 ;失败 非0值;