第4章 多线程-【千锋教育】Linux系统编程(慕课版)

2023-03-21
| 63页
| 155人阅读
| 0人下载
教辅

内容正文:

第4章 多线程 线程基本编程 线程同步互斥机制 线程池 线程基本概念 线程同步互斥机制 4.2 4.1 线程池 4.3 ☞点击查看本小节知识架构 ☞点击查看本小节知识架构 ☞点击查看本小节知识架构 学习目标 了解 掌握 掌握 掌握 了解进程与线程的关系、线程的概念 1 掌握基本的线程池编程方法 4 2 掌握多线程编程的操作方法 3 掌握线程的通信、同步互斥机制 销售额 掌握知识 理解知识 熟悉知识 了解知识 2.5 2.5 2.5 2.5 为了进一步减少处理器的空转时间、支持多处理器以及减少系统的开销,进程演化过程中出现了另一个概念——线程。它是进程内独立的运行线路,是内核调度的最小单元,也可以称为轻量级进程。多线程编程由于其高效性和可操作性,在应用开发中使用非常广泛。本章将从线程的基本概念开始,介绍围绕多线程的诸多知识点,从而帮助读者更加深入地了解系统编程的核心内容。 4.1 线程基本概念 4.1.1 线程的基本概念 返回目录 4.1.2 线程的创建 4.1.3 线程终止与回收 4.1.4 线程编程 4.1.5 线程的分离 4.1.6 线程的取消 4.1 线程基本概念 线程是应用程序并发执行多种任务的一种机制。在一个进程中可以创建多个线程执行多个任务。每个进程都可以创建多个线程,创建的多个线程共享进程的地址空间,即线程被创建在进程所使用的地址空间上。上一章介绍了创建子进程的原理,创建子进程是通过复制父进程的地址空间得来的,父子进程只关注自己的地址空间(映射不同的物理地址空间)。因此进程与进程之间是独立的,每个进程都只需要操作属于自己的地址空间即可。而线程则不一样,创建线程无须对地址空间进行复制,同一个进程创建的线程共享进程的地址空间,因此创建线程比创建子进程要快得多。 4.1.1 线程的基本概念 4.1 线程基本概念 如图所示,一个进程可以包含多个线程。因此,同一个程序中的所有线程均会执行相同的程序,且共享进程的内存段,包括数据段、堆区。值得注意的是,进程的栈区对线程是不共享的,每个线程都拥有属于自己的栈区,用于存放函数的参数值、局部变量的值、返回地址等。 4.1.1 线程的基本概念 4.1 线程基本概念 同一个进程中的多个线程可以并发执行。在多处理器环境下,多个线程可以同时并行。如果一个线程因等待I/O操作而遭阻塞,那么其他线程依然可以继续运行。同时,同一个进程创建的线程之间进行通信相对于进程之间来说,要方便、快速地多。原因在于线程之间是共享进程的数据段的,因此,线程间通信是通过操作共享的数据段实现的。而进程则不同,每个进程所操作的地址空间是独立的,因此进程之间如果需要进行数据的传递则需要引入进程间的通信机制来实现。 4.1.1 线程的基本概念 4.1 线程基本概念 虽然线程间的通信不用考虑相对复杂的通信机制,但也有其比较棘手的问题有待解决。如果多个线程并发(同时)访问共享的进程数据段,而不按照一定的规则或顺序,则会造成共享资源的不确定,这种情况称为竞态。例如,线程1对全局变量a进行了赋值,而线程2则需要读取全局变量a的值,如果此时刚要进行读取,线程3却对变量a进行了重新赋值,那么,此时读取的结果将出现差异。 因此针对多线程编程通信的问题,Linux中提供了很多同步互斥机制,从而保证在某一个线程在操作共享资源时,不会被其他线程打扰。即一个时刻,只能有一个线程在对共享资源进行访问。 4.1.1 线程的基本概念 4.1 线程基本概念 pthread_create()函数用于在一个进程中创建一个线程。 4.1.2 线程的创建 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 函数参数thread表示新创建的线程的标识符,或者称为线程的ID。参数attr指向一个pthread_attr_t类型的结构体,用以指定新创建的线程的属性(如线程栈的位置和大小、线程调度策略和优先级以及线程的状态),如果attr被设置为NULL,则线程将采用默认的属性。参数start_routine则是该函数的重点关注对象,通过函数原型可以看出,该参数为函数指针,因此该参数只需传入函数名即可。 4.1 线程基本概念 需要注意的是,传入的函数名并不等同于一般的程序中在主函数中调用子函。它是线程的执行函数,通俗地说,线程执行的任务将封装在此函数中。参数arg作为仅有的参数,用于向第三个参数start_routine所指向的函数中传参。 pthread_create()函数的参数thread,其类型为pthread

资源预览图

第4章 多线程-【千锋教育】Linux系统编程(慕课版)
1
第4章 多线程-【千锋教育】Linux系统编程(慕课版)
2
第4章 多线程-【千锋教育】Linux系统编程(慕课版)
3
第4章 多线程-【千锋教育】Linux系统编程(慕课版)
4
第4章 多线程-【千锋教育】Linux系统编程(慕课版)
5
第4章 多线程-【千锋教育】Linux系统编程(慕课版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。