资讯动态

自学嵌入式Day28:Linux多线程编程入门(从概念到基本函数)

发布时间:2026/10/30 5:01:47 来源:尧图企业网站定制
目录一、线程的基本概念与特征1. 什么是线程2. 核心特征二、线程与进程的区别三、线程编程步骤与查看命令四、线程核心函数POSIX 标准1. 创建线程pthread_create2. 获取当前线程 IDpthread_self3. 线程退出五、线程空间的回收方式一阻塞回收pthread_join方式二分离属性pthread_detach六、总结一、线程的基本概念与特征1. 什么是线程线程是操作系统能够进行运算调度的最小单位它被包含在进程之中是进程中的实际运作单位。一个进程可以包含多个线程这些线程共享该进程的资源。作用实现并发处理相对耗时的任务比如网络请求、大文件读写等。2. 核心特征进程是系统中最小的资源分配单位。线程是系统中最小的执行单位。在同一进程中线程与线程之间是平级关系。进程在启动时默认会有一个线程称为主线程。二、线程与进程的区别对比维度进程Process线程Thread资源分配资源独立拥有独立的虚拟地址空间如 3GB 空间。共享进程资源代码、全局数据、堆、文件描述符但拥有自己独立的栈区默认 8MB。创建开销非常大需要分配完整的虚拟地址空间。相对较小只需在进程空间中额外开辟一个新的栈区。并发度相对较低。并发度高于进程共享资源切换开销小。稳定性非常稳定。进程之间互不干扰一个进程崩溃不影响另一个。相对不稳定。如果进程中存在多个线程其中一个线程崩溃整个进程都会跟着崩溃。线程与进程的关系一个进程可以包含多个线程线程依附于进程而存在。三、线程编程步骤与查看命令POSIX 线程pthread编程的三步曲创建多线程线程空间操作执行任务线程资源回收注意线程退出后默认栈区不释放必须手动回收查看系统中线程信息的命令# 可以查看轻量级进程(LWP)的信息 ps -eLo pid,ppid,lwp,stat,comm ps -eLf四、线程核心函数POSIX 标准使用线程库需要包含头文件pthread.h并且在编译时必须加上-pthread参数例如gcc thread.c -o thread -pthread。1. 创建线程pthread_createint pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);参数thread传出参数用于保存创建成功后的线程 ID。attr线程属性一般填NULL表示默认属性。start_routine回调函数函数指针。本质上是一个函数的名称是子线程要执行的代码空间。arg传递给回调函数的参数。返回值成功返回 0失败返回错误码。2. 获取当前线程 IDpthread_selfpthread_t pthread_self(void);功能获取当前线程的线程 ID数据类型是unsigned long int打印时用%lu。3. 线程退出线程有多种退出方式自行退出pthread_exitvoid pthread_exit(void *retval);参数retval是线程退出时的返回状态临死遗言可以通过资源回收函数接收。被动退出pthread_cancelint pthread_cancel(pthread_t thread);功能请求结束一个指定的线程。五、线程空间的回收这是多线程编程中非常容易出问题的地方。新线程退出后其占用的栈区资源默认不会自动释放类似于进程中的僵尸进程。方式一阻塞回收pthread_joinint pthread_join(pthread_t thread, void **retval);功能阻塞等待指定的线程结束并回收其资源。参数thread要回收的子线程 ID。retval接收子线程退出的返回值接收pthread_exit传出来的数据。注意如果指定的线程没结束调用该函数的线程通常是主线程会一直阻塞。方式二分离属性pthread_detach如果主线程很忙没空去阻塞等待子线程结束我们可以给子线程设置分离属性。核心目的设置分离属性后当子线程消亡时系统会自动回收它的空间。函数定义int pthread_detach(pthread_t thread);使用方式可以在子线程内部自己调用pthread_detach(pthread_self());也可以由主线程在创建后立即调用。六、总结线程是调度的最小单位进程是资源分配的最小单位。线程共享进程资源但拥有独立的栈线程轻量、切换快、并发高但一个线程崩溃会导致整个进程崩溃稳定性差。创建线程用pthread_create。线程退出用pthread_exit。回收线程资源要么用pthread_join阻塞等待要么用pthread_detach设置分离属性让系统自动回收。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑