首页 > 其他分享 >信息安全系统设计与实现学习笔记7

信息安全系统设计与实现学习笔记7

时间:2022-10-16 13:33:13浏览次数:60  
标签:attr 信息安全 笔记 并行执行 学习 互斥 死锁 线程 pthread

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

1、知识点归纳

第4章 并发编程

1、并行

  • 顺序算法——begin-end
    包含多个步骤,通过单个任务依次执行,每次执行一个步骤

  • 并行算法——cobegin-end
    所有任务都是并行执行的,所有任务完成后执行下一个步骤

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

2、线程

  • 原理
    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
    线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程
    同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。
    一个进程可以有很多线程,每条线程并行执行不同的任务。
    使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。
  • 优点——线程创建和切换速度更快,线程的响应速度更快,线程更适合并行计算
  • 缺点——线程需要来自用户的明确同步,许多库函数可能对线程不安全,在单CPU系统上使用线程解决问题实际上要比使用顺序程序慢

3、线程管理函数

  • 创建线程
    使用pthread_create()函数创建线程
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

attr参数的使用步骤。
1.定义一个pthread属性变量 pthread_attr_t attr。
2.用pthread_attr_init(&attr)初始化属性变量。
3.设置属性变量并在 pthread_create()调用中使用。
4.必要时,通过 pthread_attr_destroy(&attr)释放 attr资源。
  • 线程ID
    使用pthread_equal()函数对线程ID进行比较
int pthread_equal(pthread_t t1,pthread_t t2);
返回值:不同线程返回0,否则返回非0
  • 线程终止
    线程可以调用函数进行终止
void pthread_exit(void *status);
返回值:0退出值表示正常终止,非0值表示异常终止
  • 线程连接
    一个线程可以等待另一个线程的终止,通过函数终止线程的退出状态。
int pthread_join (pthread_t thread, void **status ptr);
返回值:以status_ptr返回

4、线程同步

  • 互斥量
    最简单的同步工具是锁,它允许执行实体仅在有锁的情况下才能继续执行。在Pthread中,锁被称为互斥量。
两种方法可以初始化互斥址:
静态方法:pthreaa—mutex_t m = PTHREAD_MUTEX_INITIALIZER;
定义互斥量 m, 并使用默认属性对其进行初始化。
动态方法:使用 pthread_ mutex _init() 函数,可通过attr参数设置互斥属性
  • 死锁预防
    互斥量使用封锁协议。如果某线程不能获取互斥量,就会被阻塞,等待互斥量解锁后再继续。在任何封锁协议中,误用加锁可能会产生一些问题。最常见和突出的问题是死锁。
    有多种方法可以解决可能的死锁问题,其中包括死锁预防、死锁规避、死锁检测和恢复等。
    在实际系统中,唯一可行的方法是死锁预防,试图在设计并行算法时防止死锁的发生。一种简单的死锁预防方法是对互斥量进行排序,并确保每个线程只在一个方向请求互斥量,这样请求序列中就不会有循环。
  • 条件变量
    作为锁,互斥量仅用于确保线程只能互斥地访问临界区中的共享数据对象。条件变量提供了一种线程协作的方法。在Pthread中,使用类型pthread_cond_t来声明条件变量,而且必须在使用前进行初始化。
条件变量可以通过两种方法进行初始化
静态方法——pthread_cond_t con = PTHREAD_COND_INITALLIZER;
动态方法——使用pthread_cond_init()函数,通过attr参数设置条件变量。

二、实践内容与截图

实践1:用线程进行快速排序

实践2:用线程计算矩阵的和

标签:attr,信息安全,笔记,并行执行,学习,互斥,死锁,线程,pthread
From: https://www.cnblogs.com/moonyecho/p/16796075.html

相关文章

  • C语言笔记
    Part41.程序语言的功能是:数据表达与数据处理。     数据表达就是变量定义,对数据进行定义。例如:inta,就是对a这个变量进行整型的定义。     数据处理就......
  • 20201322陈俊池学习笔记7
    第四章并发编程4.1并行计算导论在早期,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。受这种硬件条件的限制,计算机程序通常是为串行计算编写的。要求解某个......
  • vue2笔记一
    1.vue脚手架用来创建vue项目的工具包创建项目:npminstall-gvue-clivueinitwebpackVueDemovuecreate项目名称开发环境运行:cdVueDemo......
  • vuex笔记
    1.vuex是什么github站点:https://github.com/vuejs/vuex在线文档:https://vuex.vuejs.org/zh-cn/简单来说:对应用中组件的状态进行集中式的管理(读/写)2.状态自......
  • TypeScript笔记
    TS(就是JS的超集)是静态类型是弱类型(允许隐式转化)下载Ts编译器:npmi-gtypescript查看Ts:tsc使用编译器将Ts文件编译成为js文件使用:tsc文件名.ts指定路径输出:tsc--......
  • ECharts笔记
    ECharts笔记使用五步骤:引入echart.js→准备显示的盒子→初始化echarts实例对象→准备配置项→将配置项设置给echarts实例对象通用配置(所有配置项都可以添加)//......
  • MongoDB笔记
    MongoDB笔记非关系型数据库中的文档数据库本质就是存各种各样的JSON(数据库(集合(文档)))(数据库(集合(文档)))安装使用步骤:--下载安装--将bin文件目录添加到path路径--在C盘根......
  • HTML5+CSS3笔记
    HTML1、独占一行的称为块元素li是块元素2、a标签中target属性的可选值<ahref="https://www.baidu.com"target="_self">本页面打开</a><ahref="https://www.......
  • JavaScript笔记
    JavaScript原型链每创建一个函数,解析器都会想函数中添加一个prototype原型属性,这个prototype属性对应着一个对象,这个对象就是原型对象如果该函数是普通函数调用,则proto......
  • Axios笔记
    axios笔记基本知识axios返回的是一个promise对象axios将服务器返回结果自动json解析变成对象形式请求拦截器和响应拦截器请求拦截器中可以对config请求参数进行修改......