飞凌嵌入式ElfBoard-线程的创建与终止之创建线程

📅 2026/6/19 4:36:11
飞凌嵌入式ElfBoard-线程的创建与终止之创建线程
pthread_create()函数能够在进程中创建一个线程创建出来的新线程是主线程的子线程需要注意的是新线程与主线程之间的关系并非父子关系而是并行执行的多个线程。1.头文件#include pthread.h2.函数原型int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);3.参数thread指向pthread_t类型的指针用于存储新创建线程的ID。attr用于指定新线程的属性传入NULL表示使用默认属性。start_routine新线程的入口函数指针指向线程创建后将要执行的函数。arg传递给start_routine的参数。4.返回值成功返回 0。失败返回错误码表示不同的错误原因。5.注意事项1确保线程函数为全局或静态线程函数 start_routine 必须是一个具有静态生命周期的函数例如全局函数或静态函数这样可以避免在创建线程前函数被释放的风险。2确保传递给 arg 参数的数据有效arg 通常用于传递数据指针。确保传递的数据在整个线程生命周期内有效避免使用栈上的局部变量防止访问无效地址。如果需要传递多个参数可以通过结构体将多个参数打包传递结构体指针给线程函数。3检查 pthread_create() 的返回值pthread_create() 返回值为 0 表示线程创建成功非 0 值表示发生错误。可以使用 errno 查看具体的错误类型。失败的常见原因包括资源不足例如线程过多和无效参数如线程属性无效。4线程属性设置如果需要设置线程为分离状态可以使用 pthread_attr_t 结构初始化线程属性然后设置 PTHREAD_CREATE_DETACHED。分离状态后面再介绍的线程在结束后自动释放资源不需要 pthread_join()。实现一个分离线程的流程如下。pthread_attr_t attr;pthread_attr_init(attr);pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);pthread_create(thread, attr, start_routine, arg);pthread_attr_destroy(attr)5避免在线程中直接使用 exit()如果线程函数直接调用 exit()会导致整个进程退出。要结束线程可以使用 pthread_exit() 或让线程函数正常返回。6管理线程的返回值如果线程是非分离状态需要 pthread_join() 等待其结束以获取返回值并回收资源。若线程是分离状态不需要 pthread_join()会自动释放资源但无法获取返回值。