在前面的博文中讨论了进程的相关概念,这里重新引入一下‘线程’的概念。进程有各自独立的地址空间,所以进程间的通信是比较麻烦的,只能借助管道等才能够实现进程间通信。而linux系统中,多个线程共享进程的地址空间(也可以说是进程是一个独占资源的线程),所以线程之间的通信是非常方便的。
注:以下只针对linux系统。
★进程与线程的比较
在linux系统中,线程和进程之间的区分不是特别明显,但是它们之间还是有一些区别的:
(1)进程是系统资源分配的基本单位,线程是系统调度的基本单位。
(2)每个进程都有自己独立的地址空间,而线程之间的资源是共享的。
(3)进程间切换的系统开销较线程间切换的系统开销大。
(4)线程也有自己的私有栈,保存一些私有资源。
★线程创建和终止
头文件:#include <pthread.h>
创建: int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void* (*start_routine)(void*), void* arg);
终止: void pthread_exit(void* retval);
等待: int pthread_join(pthread_t thread, void** retval);
其中:终止线程有以下几种方法:
①从线程函数进行return。但是在主线程中return相当于终止整个进程。
②一个线程可以调用pthread_cancel终止同一进程中的另一个线程。
③线程可以调用pthread_exit终止自己。
例:
运行结果:
例:
运行结果:
★线程分离
int pthread_detach(pthread_t thread);
线程是可以进行分离的,线程可以分离自己,也可以分离子线程。一个分离后的线程是不能被其他线程回收的,它的资源是在它终止时由系统进行释放,但是当主线程退出后,分离的线程也将会退出,资源会由系统自动释放。
例:
运行结果:
本文出自 “无心的执着” 博客,转载请与作者联系!
原文:http://10740590.blog.51cto.com/10730590/1831875