首页 > 其他分享 >yzy第七周学习笔记

yzy第七周学习笔记

时间:2023-10-28 15:22:05浏览次数:38  
标签:4.6 第七 thread yzy 笔记 死锁 线程 pthread 客户端

第四章 并发编程

4.1并行计算导论

Linux 环境中有很多应用程序和很多进程,其中最重要的是客户端网络/服务器。 多进程服务器是指当客户端发出请求时,服务器使用子进程来处理客户端的请求。 父进程继续等待来自其他客户端的请求。 这种方法的优点是服务器可以在客户端请求时管理客户端,特别是在交互式客户端/服务器系统中。 对于 TCP 服务器,客户端和服务器之间的连接可能不会立即关闭。 客户端发送数据后可以关闭连接。 在此期间,服务器端进程被阻塞,操作系统可能会设置其他计划。 此时的客户服务流程。 与循环服务器相比,该服务的性能得到了显着提高。
4.1.1顺序算法与并行算法
顺序算法:begin-end代码块列出算法。可包含多个步骤,所有步骤通过单个任务依次执行,每次执行一个步骤,全执行完,算法结束。

点击查看代码
//顺序算法
begin
    step_1
    step_2
    ···
    step_n
  end

并行算法:cobegin-coend代码块来指定独立任务,所有任务都是并行执行的,紧接着代码块的下一个步骤将只在所有这些任务完成之后执行。
点击查看代码
//并行算法
cobegin
    task_1
    task_2
    ···
    task_n
  coend

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

4.2线程

4.2.1线程的原理
简单来说,线程是某进程同一地址空间上的独立执行单元。
4.2.2/3线程的优点,缺点
优点:

1.线程创建和切换速度更快

2.线程的响应速度更快

3.线程更适合并行计算
缺点:

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

2.许多库函数可能对线程不安全。通常,任何使用全局变量或依赖于静态内存内容的函数,线程都不安全。

3.在单CPU系统上,使用线程解决问题实际上要比使用顺序程序慢

4.3线程操作

线程的执行轨迹与进程类似。线程可在内核模式或用户模式下执行。
内核模式:对内核进行系统调用,变为挂起、激活以继续执行等。
用户模式:线程在进程的相同地址空间中执行,每个线程都有自己的堆栈。

4.4线程管理函数

4.4.1创建线程
pthread_create函数。如下:

点击查看代码
pthread_create(thread, attr, function, arg): create thread
pthread_exit(status)	:	terminate thread
pthread_cancel(thread)	:	cancel thread
pthread_attr_init(attr)	:	initialize thread attributes
pthread_attr_destroy(attr):     destroy thread attribute

4.4.2线程ID
一种不透明的数据类型,取决于实现情况

点击查看代码
int pthread_equal(pthread_t t1, pthread_t t2);//比较线程ID
**4.4.3线程终止** 线程函数结束后,即终止。
点击查看代码
void pthread_exit(void *status);//返回值:0退出值表示正常终止,非0值表示异常终止
**4.4.4线程连接**
点击查看代码
int pthread_join(pthread_t thread, void **status_ptr);//终止线程的退出状态以status_ptr返回

4.6线程同步

当多个线程试图修改同一共享变量或数据结构时,如果修改结果取决于线程的执行顺序,则称之为竞态条件。在并发程序中,绝不能有竞态条件。
4.6.1互斥量
在Pthread中,互斥量也被称为“锁”,意为互相排斥。允许执行实体仅在有锁的情况下才能继续执行的同步工具。
静态方法:
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER

动态方法:使用pthread_mutex_init()函数
4.6.2死锁预防
互斥量使用封锁协议,如果某线程不能获取互斥量,就会被阻塞,等待互斥量解锁后再继续,然后死锁就发生了,死锁是一种状态,许多执行实体相互等待,都无法继续下去。
有多种方法可以解决死锁问题:死锁预防、死锁规避、死锁检测和恢复等。
4.6.3条件变量
提供了一种线程协作的方法
静态方法:

点击查看代码
pthread_cond_t con = PTHREAD_COND_INITIALIZER
动态方法:使用pthread_cond_init()函数

4.6.5信号量
是一种数据结构,必须使用一个初始值和一个空等队列进行初始化。从执行实体的角度来看,对信号量的操作都是原子操作或基本操作。

4.6.6屏障
线程连接操作允许某线程等待其他线程终止,在Pthread中,可以采用的机制是屏障以及一系列屏障函数。

4.6.8Linux中的线程
Linux不区分线程和进程,它们都是由clone()系统调用创建的。

一、苏格拉底挑战及截图

二、问题与解决思路截图

三、实践过程截图

用线程计算一各N*N整数矩阵中所有元素的和

标签:4.6,第七,thread,yzy,笔记,死锁,线程,pthread,客户端
From: https://www.cnblogs.com/yzy3655921/p/17794111.html

相关文章

  • 学习笔记七
    学习笔记七一、作业要求自学教材第4章,提交学习笔记(10分),评分标准如下知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核......
  • 阅读笔记5
    领域驱动设计的最佳实践领域驱动设计(DDD)有一些最佳实践,可以帮助您更好地应对软件核心复杂性:建模与沟通:建立共享的领域模型,确保开发团队和领域专家之间的共同理解。使用通用语言来描述领域对象和操作。持续演化:领域模型是一个持续演化的过程。随着对业务需求的深入了解,不断改进和......
  • uboot中am335x的relocate分析--Apple的学习笔记
    一,前言今天我主要先分析下bbblack的relocate。至于为什么要分析这块内容,因为我个人理解,内存分布也是重要内容,最关键的是这些内容我3年前分析过TQ2440的,但是没分析过bbblack的,所以补上。二,实践先在board_f.c中添加#define_DEBUG1就支持debug函数打印信息了。U-Boot2023.10(Oc......
  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记7
    20211306密码系统设计与实现课程学习笔记7任务详情自学教材第4章,提交学习笔记知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题......
  • Linux第4章学习笔记
    第四章学习笔记并发编程并行计算导论早期,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。受这种硬件条件的限制,计算机程序通常是为串行计算编写的。并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速地解决问题。顺序算法和并行算法并行性与并发......
  • 数字图像处理实验笔记
    实验一数学形态学图像处理实验内容与要求使用结构元素函数strel分别定义'square'和'disk'形状的结构元素,对下图(a)所示的二值图像进行腐蚀(imerode)和膨胀(imdilate)操作,分析腐蚀和膨胀运算的作用。结合腐蚀和膨胀运算,使用开运算(imopen)和闭运算(imclose),对下图(b)所示的二值图像进行开运......
  • 第四章学习笔记
    第四章学习笔记第四章并发编程本章论述了并发编程,介绍了并行计算的概念,并指出了并行计算的重要性;比较了顺序算法与并行算法,以及并行性与并发性;解释了线程的原理及其相对于进程的优势;介绍了Pthread中的线程操作,包括线程管理函数,互斥量、连接、条件变量和屏障等线程同步工具;解释......
  • 作笔记tips
    将项目目录结构作笔记有时候需要输出,项目的目录结构,比如js文件夹下的a.js项目目录下打开cmd,输入tree,这时就能复制这个目录结构了C:...>treeE:.├─.hbuilderx├─pages│├─category│├─home│├─index│└─mine├─static└─unpackage└─dis......
  • 学习笔记7
    教材知识点总结并行计算导论:顺序算法与并行算法:顺序算法是按照一定的顺序执行的算法,而并行算法是可以同时执行多个任务的算法。并行算法可以通过将任务分解为多个子任务并行执行来提高计算效率。并行性与并发性:并行性是指多个任务同时进行,而并发性是指多个任务交替进行。并......
  • 学习笔记:最小生成树
    最小生成树引入我们定义无向连通图的最小生成树(MinimumSpanningTree,MST)为边权和最小的生成树。注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。实现求最小生成树的算法有Prim和Kruskal两种。这里我们主要讲解Kruskal算法(其实是因为太菜了不会Prim)。Krusk......