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

学习笔记七

时间:2023-10-28 14:33:07浏览次数:31  
标签:知识点 void 笔记 学习 互斥 线程 pthread 执行

学习笔记七

一、作业要求

自学教材第4章,提交学习笔记(10分),评分标准如下

  1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)

“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

核心是要求GPT:“请你以苏格拉底的方式对我进行提问”

然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”

如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”

GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

  1. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)

  2. 实践过程截图,代码链接(2分)

  3. 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识点总结

1. 并行计算导论

1.1 顺序算法与并行算法

在描述顺序算法中,常用一个begin-end代码块列出算法。

  • begin-end代码块中的顺序算法可能包含多个步骤,所有步骤都是通过某个任务依次执行的。

  • cobegin-coend代码块指定并行算法的独立任,所有任务都是并行执行的。

1.2 并行性与并发性

在理想情况下,并行算法中的所有任务都应该同时实时执行。

2. 线程

2.1 线程的原理

在进程模型中,进程是独立的执行单元。所有进程均在内核模式或用户模式下执行。在内核模式下,各进程在唯一地址空间上执行,与其他进程是分开的。虽然每个进程都是一个独立的单元,但是它只有一个执行路径。

2.2 线程的优点

与进程相比,线程有许多优点:

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

  2. 线程的响应速度更快

  3. 线程更适合并行计算

2.3 线程的缺点

另一方面,线程也有一些缺点,其中包括:

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

  2. 许多库函数可能对线程不安全,例如传统 strtok()函数。

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

3. 线程操作

线程操作的执行轨迹与进程类似。线程可在内核模式或用户模式下执行。在用户模式下,线程在进程的相同地址空间中执行,但每个线程都有自己的执行堆栈。线程是独立的执行单元,可根据操作系统内核的调度策略,对内核进行系统调用,变为挂起、激活以继续执行等。

4. 线程管理函数

4.1 创建线程
int pthread_create(pthread_t *thread_id,pthread_attr_t *attr,void *(*func)(void*), void *arg);
4.2 线程ID

线程ID是一种不透明的数据类型,取决于实现情况。因此,不应该直接比较线程ID。如果需要,可以使用pthread_equal()函数对它们进行比较。

int pthread_equal(pthread_t t1,pthread_t t2);

如果是不同的线程,则返回0,否则返回非0

4.3 线程终止

线程函数结束后,线程即终止。或者,线程可以调用函数

void pthread_exit(void *status);

进行显式终止,其中状态是线程的退出状态。通常,0退出值表示正常终止,非0值表示异常终止

4.4 线程连接

一个线程可以等待另一个线程的终止,通过:

int pthread_join (pthread_t thread, void **status ptr);

终止线程的退出状态以status_ptr返回。

5. 线程同步

5.1 互斥量

最简单的同步工具是锁,它允许执行实体仅在有锁的情况下才能继续执行。在Pthread中,锁被称为互斥量,意思是相互排斥。互斥变量是用pthread_mutex_t类型声明的,在使用之前必须对他们进行初始化,有两种方法可以初始化互斥量。

  • 静态方法:定义互斥变量m,并使用默认属性对其进行初始化。

pthreaa_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
  • 动态方法:使用pthread_ mutex _init()函数,可通过attr参数设置互斥属性,如:

pthread_mutex_init(pthread_mutex_t *m,pthread_mutexattr_t,*attr);
5.2 死锁预防

死锁是一种状态,在这种状态下,许多执行实体相互等待,因此都无法继续下去,一种简单的死锁预防是对互斥量进行排序,并确保每个线程只在一个方向请求互斥量,这样请求序列中就不会有循环。

5.3 条件变量

条件变量提供了一种线程协作的方法,首先获取相关的互斥量。然后,它在互斥量的临界区内执行操作,然后释放互斥量。

5.4 信号量

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

struct sem{
 int value;
 struct process *queue
}s;

三、代码实现

编译显示pthread是未定义的引用

通过chatgpt询问,在代码命令后加入-pthread,编译通过

四、利用chatgpt提问

 

标签:知识点,void,笔记,学习,互斥,线程,pthread,执行
From: https://www.cnblogs.com/llwwjj/p/17793854.html

相关文章

  • 阅读笔记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中的线程操作,包括线程管理函数,互斥量、连接、条件变量和屏障等线程同步工具;解释......
  • HuggingFace机器视觉学习
    HuggingFace中计算机视觉的现状:https://huggingface.co/blog/zh/cv_state从0开始timm库的quickstarthttps://huggingface.co/docs/timm/quickstart例子中通过调用模型mobilenetv3_large_100识别图像mobilenetv3_large_100模型的说明页https://huggingface.co/timm/mobi......
  • 2023-2024-1 20231312《计算机基础与程序设计》第5周学习总结
    作业信息这个作业属于哪个课程<班级的链接>2023-2024-1-计算机基础与程序设计|-这个作业要求在哪里<作业要求链接>2023-2024-1计算机基础与程序设计第四周作业|这个作业的目标《计算机基础概论》第6章《C语言程序设计》第4章|作业正文作业链接教材学习......
  • SSTI模板注入学习
    一、前言最近在练ctf的时候遇到了不少模板注入的漏洞,自己对这一块也一直是一知半解的,所以记录一下,对这一块知识也进行一个总结。二、什么是模板注入SSTI(服务器端模板注入)是格式化字符串的一个非常好的例子,如今的开发已经形成了非常成熟的MVC的模式,我们的输入通过V接收,交给......
  • 作笔记tips
    将项目目录结构作笔记有时候需要输出,项目的目录结构,比如js文件夹下的a.js项目目录下打开cmd,输入tree,这时就能复制这个目录结构了C:...>treeE:.├─.hbuilderx├─pages│├─category│├─home│├─index│└─mine├─static└─unpackage└─dis......