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不执行清理

返回值:无