首页 > 代码库 > Linux C 程序 线程(18)
Linux C 程序 线程(18)
线程控制
1.线程与进程的关系
线程:计算机中独立运行的最小单位。
在用户角度:多个线程是同时执行的。
操作系统角度:各个线程交替执行
以上只针对单核CPU的情况
在多核CPU主机上,多个线程可以同时运行。
为什么支持对进程的情况下引入多线程?多线程相对多进程有以下优点:
1.多进程的情况下,每个进程有自己的独立的空间地址。同一进程内的多个线程共享进程内的空间地址
2.在系统调度方面:进程空间独立,线程共享空间,线程间的切换速度远远快于进程间的切换。
3.在通信机制方面:进程间的数据互相独立,通信要以专门的通信方式,必须经过操作系统,同一进程内的
线程共享数据空间,直接修改,不必进过操作系统,方便省时。
概括以上优点:节约:节约资源,节约时间
4.提高应用程序的响应速度
5.提高多处理器的效率
6.改善程序结构
虽然线程在进程内共享空间地址,但是也有自己的私有数据
1.线程号thread id
2.寄存器
3.堆栈
4.信息掩码
5.优先级
6.线程私有的存储空间
Linux支持POSIX多线程接口,称为pthread。
编写Linux下的多线程程序需要使用头文件pthread.h,链接时需要使用libpthread.a
2.创建线程
1.线程创建函数pthread_create
函数的执行次数要被限制为一次pthread_once
2.线程属性 pthread_create 函数的一个参数pthread_attr_t,一个结构体
3.线程终止 (1)return (2)pthread_exit()
在主线程中return返回或调用exit,则整个进程将终止,因此主线程不能过早返回
如果主线程调用pthread_exit,那么仅仅主线程消亡,进程不会结束,进程内的其他线程不会终止,直到所有线程结结束,进程才会终止。
线程终止最重要的问题是资源释放问题:pthread_cleanup_push(),pthread_cleanup_pop()用于自动释放资源。两个函数必须成对出现{}
另一个问题:线程同步问题。
3.私有数据
4.线程同步
1.互斥锁
2.条件变量
3.异步信号
5.出错处理
1.错误检查
2.错误码
3.错误提示信息
strerror string.h
perror stdio.h
Linux C 程序 线程(18)