Linux第4章学习笔记

发布时间 2023-10-28 12:23:54作者: maple、kite

第四章学习笔记

并发编程

并行计算导论

早期,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。受这种硬件条件的限制,计算机程序通常是为串行计算编写的。
并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速地解决问题。

顺序算法和并行算法

并行性与并发性

通常,并行算法只识别可并行执行的任务,但是它没有规定如何将任务映射到处理组件。在理想情况下,并行算法中的所有任务都应该同时实时执行。然而,真正的并行执行只能在有多个处理组件的系统中实现,比如多处理器或多核系统。在单 CPU 系统中,一次只能执行一个任务。在这种情况下,不同的任务只能并发执行、即在逻辑上并行执行。在单CPU系统中,并发性是通过多任务处理来实现的。

线程

线程的原理

  • 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
  • 线程是独立调度和分派的基本单位。
  • 同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。
  • 一个进程可以有很多线程,每条线程并行执行不同的任务。

线程的优点

与进程相比,线程有许多优点。
(1)线程创建和切换速度更快
(2)线程的响应速度更快
(3)线程更适合并行计算

线程的缺点

(1)由于地址空间共享,线程需要来自用户的明确同步。
(2)许多库函数可能对线程不安全。通常,任何使用全局变量或依赖于静态内存内容的函数,线程都不安全。
(3)在单CPU系统上,使用线程解决问题实际上要比使用顺序程序慢

线程操作

线程的执行轨迹与进程类型。线程可在内核模式或用户模式下执行。线程是独立的执行单元,可根据操作系统内核的调度策略,对内核进行系统调用,变为挂起、激活以继续执行等。

线程管理函数

创建线程

线程ID

线程终止

线程连接

线程同步

当多个线程试图修改同一共享变量或数据结构时,如果修改结果取决于线程的执行顺序,则称之为竞态条件
通常,同步是一种机制和规则,用于确保共享数据对象的完整性和并发执行实体的协调性。

互斥量

最简单的同步工具是,它允许执行实体仅在有锁的情况下才能继续执行。在Pthread中,锁被称为互斥量。在使用之前必须对他们进行初始化。

死锁预防

互斥量使用封锁协议。如果某线程不能获取互斥量,就会被阻塞,等待互斥量解锁后再继续。在任何封锁协议中,误用加锁可能会产生一些问题。最常见和突出的问题是死锁。

条件变量

作为锁,互斥量仅用于确保线程只能互斥地访问临界区中的共享数据对象。条件变量提供了一种线程协作的方法。在Pthread中,使用类型pthread_cond_t来声明条件变量,而且必须在使用前进行初始化。

信号量

信号量是进程同步的一般机制。信号量是一种数据结构

屏障

线程连接操作允许某线程(通常是主线程)等待其他线程终止。创建新线程需要系统开销。

苏格拉底挑战

Linux/Unix中的并发编程




线程管理函数



chatgpt

线程的创建和销毁过程以及相关的函数调用


代码