20250827的学习笔记
一、pthread 线程
(1)优点:
比多进程节省资源,可以共享变量。
(2)概念:
线程是轻量级进程,一般是一个进程中的多个任务。
注:进程是系统中最小的资源分配单位,线程是系统中最小的执行单位。
(3)特征:
1、共享资源
2、效率高 30%
3、三方库:pthread cloneposix
注:使用时要记得编写代码头文件:pthread.h,编译代码:gcc 1.c -lpthread
(4)缺点:
1、线程和进程相比,稳定性,稍微差些
2、线程的调试gdb,相对麻烦些。
(5)线程和进程的共同点
并发
(6)线程和进程的不同点
1、创建的开销,proc 3G,thread 8M。
2.、proc数据不共享 thread 共享(除栈区)。
3、稳定性,proc稳定,thread(不稳定)。
4、proc(大任务),thread(大任务中的小任务)。
5、线程是属于某个进程的。
二、创建多线程
1.int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
功能:
该函数可以创建指定的一个线程。
参数:
thread 线程id,需要实现定义并由该函数返回。
attr 线程属性,,一般是NULL,表示默认属性。
start_routine 指向指针函数的函数指针。
返回值:
成功 0
失败 错误码
2. pthread_t pthread_self(void); unsigned long int;
注:使用输出%lu
功能:
获取当前线程的线程id
参数:无
返回值:
成功 返回当前线程的线程id
失败 -1;
三、线程的退出
1.void pthread_exit(void *retval);
功能:
子线程自行退出
参数:
retval 线程退出时候的返回状态,临死遗言。
返回值:无
2.int pthread_cancel(pthread_t thread);
功能:
请求结束一个线程
参数:
thread 请求结束一个线程tid
返回值:
成功 0
失败 -1;
四、线程的回收
1.int pthread_join(pthread_t thread, void **retval);
功能:
通过该函数可以将指定的线程资源回收,该函数具有阻塞等待功能,如果指定的线程没有结束,则回收线程会阻塞。
参数:
thread 要回收的子线程tid
retval 要回收的子线程返回值/状态。
返回值:
成功 0
失败 -1
注:设置分离属性目的是,线程消亡,自动回收空间。
2.int pthread_attr_init(pthread_attr_t *attr);
功能:
初始化一个attr的变量
参数:
attr,需要变量来接受初始值
返回:
成功 0
错误 非0
3.int pthread_attr_destroy(pthread_attr_t *attr);
功能:
销毁attr变量。
参数:
attr,属性变量
返回:
成功 0
错误 非0
4.void pthread_cleanup_push(void (*routine)(void *), void *arg);
功能:
注册一个线程清理函数
参数:
routine 线程清理函数的入口
arg 清理函数的参数。
返回值:无
5.void pthread_cleanup_pop(int execute);
功能:
调用清理函数
参数:
execute 非0执行清理函数,0不执行清理
返回值:无