第四单元读书笔记

第四章并发编程

介绍Pthread中的线程操作,包括线程管理函数,互斥量、连接、条件变量和屏障等线程同步工具。

  • 4.1并行计算导论

  • 4.1.1顺序算法与并序算法

使用cobegin-coend代码块来指定并行算法的独立任务。之将这些任务完成。

  • 4.1.2并行性与并发性
    并行算法只识别可并行执行的任务;只发生在多处理器或者多核系统中。并发执行可以

  • 4.2线程

  • 4.2.1线程原理
    进程模型中,进程是独立执行单元。所有进程都在内核模式或者用户模式下执行。线程是某进程同一地址空间上的独立执行单元。创建某个进程就是在唯一的地址空间创建一个主线程。

  • 4.2.2线程的优点
    (1)线程创建和切换速度更快。因为不需要获取新的资源和物理地址空间。
    (2)响应速度更快。一个线程被挂起,这个程序的其他线程还能在后台继续运算。
    (3)线程更是和并行运算。并行计算的目标是使用多个执行路径更快地解决问题。基于分治原则的算法经常表现出高度的并行性,通过使用并行或者并发执行来提高计算速度。这种算法有要求实体共享公用数据。不同进程需要在不同地址间进行数据交换;而线程共享同一地址空间中的所有数据。所以线程编写并运行的程序比使用进程编程更简单,更自然。

  • 4.2.3线程的缺点
    (1)由于地址空间共享,线程需要来自由用户的明确同步。
    (2)许多库函数可能对于线程不安全。
    (3)在单CPU系统上,在线程解决问题实际上要比使用顺序程序慢。

  • 4.3线程操作
    线程执行轨迹与进程类似。几乎所有操作系统都支持POSIX Pthread,定义了一系列标准应用程序编程接口(API)来支持线程编程

  • 4.4线程管理函数
    Pthread提供一下五个线程管理API

  • 4.4.1创建线程
    ptread_cread()

    成功返回0 。失败返回错误代码。
    参数

    Attr

    实现

  • 4.4.2线程ID
    一种不透明的数据类型,取决于实际情况。不应该直接比较线程ID。如果需要适用如下函数。

  • 4.4.3线程终止
    线程函数结束后,线程即终止。

  • 4.4.4线程连接
    一个线程等待另一个线程的终止

  • 4.5线程示例程序
    示例4.5.1用线程计算矩阵的和

  • 4.5.2用线程快速排序


  • 4.6线程同步
    线程在同一进程地址空间中执行,它们共享同一地址空间中的所有变量和数据结构。并发程序中,绝对不能存在竞争状态。为了防止出现竞争状态并且支持线程写作,线程需要同步。同步是一种机制和规则,用来确保共享数据对象的完整性和并发执行实体的协调性。

  • 4.6.1互斥量
    ,简单的同步工具。在Pthread中锁被称作互斥量。
    两种初始化互斥量的方法

    Attr参数

    示例4.3

  • 4.6.2死锁预防
    互斥量使用封锁协议。日过线程不能获取互斥量,就会发生阻塞,等待互斥量解锁后在继续。
    死锁一种状态,这种状态下,许多执行实体相互等待,一次都无法继续。
    执行条件加锁和退避来预防死锁。

  • 4.6.3条件变量
    锁,互斥量仅用于确保线程只能互斥地方临界区中的的共享数据对象。条件变量提供乐一中线程写作方法。条件变量总是与互斥量一起使用。互斥是所有同步机制的基础。在Pthread中使用**pthread_cond_t **来声明条件变量,必须初始化。

    使用方法:

  • 4.6.4生产者—消费者问题

 示例程序4.4



  • 4.6.5信号量
    进程同步的一般机制
    数据结构

    PV原语

    信号量函数

  • 4.6.6屏障
    线程连接操作允许某线程(通常是主程序)等待其他线程终止。在某些情况下,保持线程活动会更好,但应该要求它们在所有线程都达到指定同步点之前不能继续活动。在Pthread中,采用屏障机制
    创建屏障对象

  • 4.6.7用并发线程解线性方程组
    示例4.5



  • 4.6.8Linux中的线程
    Linux操作系统不区分进程和线程。对于linux内核,线程只是一个与其他进程共享某些资源的进程。
    进程和线程都用clone()系统调用创建

    宏定义

    资源存储

posted @ 2022-10-16 22:02  岳华  阅读(21)  评论(0编辑  收藏  举报