7.线程的基本概念
7.线程的基本概念 **1. 线程的基本概念** **2. 线程与进程的区别** **3. 线程的创建与回收** **4. 线程的参数传递与返回值** **5. 线程的分离属性** **6. 线程的清理函数** **7. 线程与进程的对比** **8. 练习与作业** **9. 总结**
1. 线程的基本概念
线程 :线程是轻量级进程,是进程中的多个任务。线程是系统中最小的执行单位。进程 :进程是系统中最小的资源分配单位。线程的优点 : 线程的缺点 : 稳定性比进程稍差。 调试相对麻烦(如使用gdb
调试线程时需要使用info thread
等命令)。
2. 线程与进程的区别
资源 : 线程共享进程的资源(如内存、文件描述符等)。 线程也有部分私有资源(如栈、寄存器等)。 进程间只有私有资源,没有共享资源。 空间 : 进程空间独立,进程间不能直接通信。 线程共享进程的地址空间,线程间可以直接通信。
3. 线程的创建与回收
线程创建 : 函数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
功能:创建一个线程。 参数: thread
:线程ID,由函数返回。attr
:线程属性,通常为NULL
(默认属性)。start_routine
:线程执行的函数(回调函数)。arg
:传递给回调函数的参数。 返回值:成功返回0
,失败返回错误码。 线程ID : 函数原型:pthread_t pthread_self(void);
功能:获取当前线程的ID。 返回值:当前线程的ID。 线程退出 : 自行退出 : 函数原型:void pthread_exit(void *retval);
功能:线程自行退出,并返回一个状态值。 参数:retval
:线程退出时返回的状态值。 强制退出 : 函数原型:int pthread_cancel(pthread_t thread);
功能:强制结束指定线程。 参数:thread
:要结束的线程ID。 返回值:成功返回0
,失败返回错误码。 线程回收 : 函数原型:int pthread_join(pthread_t thread, void **retval);
功能:回收指定线程的资源,并获取其退出状态。 参数: thread
:要回收的线程ID。retval
:存储线程退出状态的指针。 返回值:成功返回0
,失败返回错误码。
4. 线程的参数传递与返回值
传递参数 : 返回值 : 通过pthread_exit
返回一个指针,主线程通过pthread_join
获取该指针。 示例:void * fun ( void * arg) { int * ret = malloc ( sizeof ( int ) ) ; * ret = 10 ; pthread_exit ( ret) ;
}
void * retval;
pthread_join ( tid, & retval) ;
int result = * ( int * ) retval;
5. 线程的分离属性
设置分离属性 : 分离属性的线程在结束时自动回收资源,无需pthread_join
。 方法1:使用pthread_attr_setdetachstate
:pthread_attr_t attr;
pthread_attr_init ( & attr) ;
pthread_attr_setdetachstate ( & attr, PTHREAD_CREATE_DETACHED) ;
pthread_create ( & tid, & attr, fun, NULL ) ;
pthread_attr_destroy ( & attr) ;
方法2:使用pthread_detach
:pthread_detach ( tid) ;
6. 线程的清理函数
注册清理函数 : 函数原型:void pthread_cleanup_push(void (*routine)(void *), void *arg);
功能:注册线程退出时执行的清理函数。 参数: routine
:清理函数。arg
:传递给清理函数的参数。 调用清理函数 : 函数原型:void pthread_cleanup_pop(int execute);
功能:调用清理函数。 参数:execute
:非0
表示执行清理函数,0
表示不执行。
7. 线程与进程的对比
功能 进程 线程 创建 fork
pthread_create
获取ID getpid
pthread_self
退出 exit
pthread_exit
回收资源 wait
/ waitpid
pthread_join
强制终止 kill
pthread_cancel
清理函数 atexit
pthread_cleanup_push
8. 练习与作业
练习1 :设计一个多线程程序,至少有三个子线程,每个线程执行不同的任务,并实时打印执行过程,同时标明身份。练习2 :向子线程传递字符串参数,并在子线程中打印输出。练习3 :定义一个结构体,向子线程传递结构体参数,并在子线程中打印输出。作业1 :创建一个多线程程序,至少有10个子线程,每个线程打印不同的数据,并标明身份。作业2 :设计一个多线程程序,主线程获取用户输入并组织成结构体,子线程进行运算后将结果返回给主线程并输出。
9. 总结
线程是轻量级进程,共享进程的资源,适合需要高并发和资源共享的场景。 通过pthread_create
创建线程,pthread_join
回收线程资源,pthread_exit
退出线程。 线程可以传递参数和返回值,支持分离属性和清理函数。 线程与进程相比,调试和稳定性稍差,但在资源利用和效率上有明显优势。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68616.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!