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

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

时间:2023-10-26 15:13:14浏览次数:28  
标签:并发 int 信息安全 笔记 学习 互斥 mutex pthread 线程

并发编程

并行计算

基于分治原则的算法经常表现出高度的并行性,可通过使用并行或并发执行来提高计算速度。

顺序算法和并行算法

顺序算法

begin
   step_1
   step_2
   ...
   step_n
end
//next step

并行算法

cobegin
   task_1
   task_2
   ...
   task_n
coand
// next step

cobegin-coend块中,所有任务都是并行执行的。

并行性与并发性

理想情况下,并行算法中的所有任务都应该同时实时执行。但真正的并行执行只能在有多个处理组件的系统中实现,比如多处理器或多核系统。单cpu中,一次只能执行一个任务,并发性是通过多任务处理来实现的

线程原理

操作系统包含许多并发进程
-->
线程是某进程同一地址空间的独立执行单元
-->
创建某个进程就是在一个唯一地址空间创建一个主线程。进程开始时,就会执行该进程的主线程
-->
主线程可能会创建其他线程,每个线程又创建更多的线程
-->
某进程的所有线程都在该进程的相同地址空间中执行,但每个线程都是一个独立的执行单元。如果一个线程被挂起,其他线程可以继续执行。

线程的优点:

  1. 线程创建和切换速度更快。线程与进程共用一个地址空间,在进程中创建线程不必为新的线程分配内存和创建页表。
  2. 线程的响应速度更快。某个线程被挂起时,同一线程中的其他线程可以继续执行。
  3. 线程更适合并行计算

线程的缺点:

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

线程操作

  1. 线程管理函数
    创建函数
pthread_creat()
   int pthread_creat (pthread_t *pthread_id, pthread_attr_t *attr,
   void *(*func)(void *), void *arg);

成功则返回0,失败则返回错误代码。
pthread_id是指向pthread_t类型的指针。
attr是指向另一种不透明数据类型的指针。
线程ID
int pthread_equal (pthread_t t1,pthread_t t2);
线程终止
int pthread_exit (void *status);
显示终止
线程连接
int pthread_join (pthread_t thread, void **status_ptr);
2. 互斥量
3. 连接
4. 条件变量
5. 屏障

线程进行并发编程

  1. 矩阵计算

  2. 快速排序

线程同步

最简单的同步工具是锁(互斥量),它允许执行实体仅在有锁的情况下才能继续执行。
初始化互斥量
(1)静态
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
(2)动态
pthread_mutex_init(pthread_mutex_t *m,pthread_mutexattr_t,*attr)
使用互斥量

int pthread_mutex_lock (pthread_mutex_t *m);
int pthread_mutex_unlock (pthread_mutex_t *m);
int pthread_mutex_trylock (pthread_mutex_t *m);
int pthread_mutex_destroy (pthread_mutex_t *m);
  1. 并发线程求解线性方程组

死锁问题

  1. 防止并发程序中的死锁
    互斥量使用封锁协议,如果某线程不能获取互斥量,就会被阻塞,等待互斥量解锁后再继续。
    利用条件加锁和退避来预防死锁
while(1){
   lock(m1);
   if (!trylock(m2))
      unlock(m1);
   else
       break;
}

条件变量

初始化
静态
pthread_cond_t con= PTHREAD_COND_INITIALIZER;
动态

pthread_mutex_t con_mutex;
pthread_cond_t con;
pthread_mutex_init(&con_mutex, NULL);
pthread_cond_init(&con,NULL);

信号量

信号量是进程同步的一般机制。信号量是一种数据结构
信号量相对于条件变量的优点

标签:并发,int,信息安全,笔记,学习,互斥,mutex,pthread,线程
From: https://www.cnblogs.com/laijiayi/p/17789450.html

相关文章

  • 线性代数笔记02
    蓝月の笔记——线性代数\(.02\)视频链接\(\mathfrak{Mathematics\requires\a\small\dose,\not\of\genius,\but\of\an\imaginative\freedom\which,\in\a\larger\dose,\would\be\insanity.}\)......
  • vue学习笔记之执行顺序
       vue文件加载顺序:index.html>app.vue>main.js     加载顺序详情:执行index.html(index.html中id为app的div标签是一个挂载点,之后我们的Vue根实例就会挂载到该挂载点上)执行main.jsmain.js找到实例挂载app.vue文件,将index.html的挂载的内容显示出来(用app.vue的template......
  • MarkDown笔记如何上传cnblog
    简介Dotnet-cnblog工具可以配合typora实现自动上传md文件里图片到博客园的图床,这样就不用自己一张张来上传安装过程1.配置NET环境net环境下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/5.0下载后安装NET环境,运行cmd命令:dotnet--info查看是否安装成功2.安......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第七周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第七周学习笔记一、任务要求1.自学教材第4章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知......
  • Java面试笔记
    Java面试笔记Java面试笔记第一章:Java基础知识1.1Java程序初始化顺序Java程序初始化一般遵循以下三个原则(优先级依次递减)静态对象(变量)​优先于​非静态对象初始化静态对象初始化一次非静态对象可能初始化多次父类优先于子类初始化按照成员变量定义顺序进行初始化即使变......
  • anaconda学习(未完成)
    1.Anaconda安装教程(以32.7.4为例)官网地址:https://www.anaconda.com/download(如无法下载可跳转清华源下载)下载完成后点击打开即可安装点击Next选择IAgree在此选择JustMe(recommended),点击Next我选择了默认路径(建议有其它盘,装入其他盘,安装路径不要包含汉字和空格),点击Next勾选第......
  • esp32笔记[9]-rust的串口收发及GCODE解析
    摘要使用rust在no-std环境下实现esp32-c3串口收发及gcode解析.平台信息esp32c3rust超链接esp32笔记[7]-使用rust+zig开发入门使用rust实现串口中断示例代码:serial_interrupts.rs//!ThisshowssomeoftheinterruptsthatcanbegeneratedbyUART/Serial.//!Us......
  • MySQL学习(9)统计数据
    存储方式MySQL提供了两种存储统计数据的方式,分别是永久性地存储统计数据和非永久性地存储统计数据,分别存储在磁盘和内存中。系统变量innodb_stats_persistent用来控制统计数据存储在哪里。值为OFF表示存储在内存,值为ON表示存储在磁盘。SHOWVARIABLESLIKE'innodb_stats_persi......
  • 《Unix/linux系统编程》教材第4章学习笔记
    |第4章|并发编程并行计算导论基于分治原则(如二叉树查找和快速排序等)的算法经常表现出高度的行性,可通过使用并行或并发执行来提高计算速度。并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速地解决问题。顺序算法与并行算法用一个begin-end代码块列出代码......
  • 随机算法学习指南
    整数数组随机生成算法[python]#pythonimportrandomarray=[random.randint(-100,100)for_inrange(1000)]foriinarray:print(i,end="")随机抽取一组不重复的数Fisher-Yates洗牌算法(Knuth洗牌算法)时间复杂度优化到了O(n),空间复杂度优化到了O(1)。voidshuffle......