其他分享
首页 > 其他分享> > 20191330雷清逸 学习笔记7

20191330雷清逸 学习笔记7

作者:互联网

20191330 雷清逸 学习笔记7(第四章)

一、知识点归纳以及自己最有收获的内容

知识点归纳

摘要

本章论述了并发编程,介绍了并行计算的概念,指出了并行计算的重要性;比较了顺序算法与并行算法,以及并行性与并发性;解释了线程的原理及其相对于进程的优势;通过示例介绍了 Pthread中的线程操作,包括线程管理函数,互斥量、连接、条件变量和屏障等线程同步工具;通过具体示例演示了如何使用线程进行并发编程,包括矩阵计算、快速排序和用并发线程求解线性方程组等方法;解释了死锁问题,并说明了如何防止并发程序中的死锁问题;讨论了信号量,并论证了它们相对于条件变量的优点;解释了支持Linux中线程的独特方式。编程项目是为了实现用户级线程。它提供了一个基础系统来帮助读者开始工作。这个基础系统支持并发任务的动态创建、执行和终止,相当于在某个进程的同一地址空间中执行线程。读者可通过该项目实现线程同步的线程连接、互斥量和信号量,并演示它们在并发程序中的用法,该编程项目会让读者更加深入地了解多任务处理、线程同步和并发编程的原理及方法。

最有收获的部分

并行计算导论

线程

(1)由于地址空间共享,线程需要来自用户的明确同步。

(2)许多库函数可能对线程不安全,例如传统strtok()函数将一个字符串分成一连串令牌。

(3)在单CPU系统上,使用线程解决问题世界上要比使用顺序程序慢,这是由在运行时创建线程和切换上下文的系统开销造成的。

线程操作

线程管理函数

Pthread库提供了用于线程管理的以下API:

pthread_create() //创建一个新的进程,成功则返回0;失败则返回错误代码。
pthread_exit() //线程终止函数,0表示正常终止;非0表示异常终止。
pthread_cancel() //结束某个线程,只是请求取消运行。
pthread_equal() //比较线程ID,不同返回0;否则返回非0。
pthread_join() //等待另一个线程终止。

线程同步

由于线程在进程的同一地址空间中执行,它们共享同一地址空间中的所有全局变量和数据结构。当多个线程试图修改同一共享变量或数据结构时,如果修改结果取决于线程的执行顺序,则称之为竞态条件。在并发程序中,绝不能有竞态条件。否则,结果可能不一致。

互斥量使用封锁协议。如果某线程不能获取互斥量,就会被阻塞,等待互斥量解锁后再继续。

死锁是一种状态,在这种状态下,许多执行实体相互等待,因此都无法继续下去。

条件变量提供了一种线程协作的方法。

条件变量也可以通过两种方法进行初始化。

(1)静态方法:pthread_cond_t con = PTHREAD_COND_INITIALIZER

定义一个条件变量con,并使用默认属性对其进行初始化。

(2)动态方法:另一种是动态方法,使用pthread_cond_init()函数,可通过attr参数设置条件变量。

标签:互斥,笔记,20191330,并行计算,线程,清逸,pthread,进程,执行
来源: https://www.cnblogs.com/leo-skr/p/15491022.html