Linux C 程序 线程(18)

时间:2024-09-11 21:05:20

线程控制

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