对于程序员来讲多线程意味着什么?

多线程

函数的可重入性(reentrant)

线程安全

可重入的函数是线程安全的吗?

用互斥锁让linktable中所有函数可重入

互斥锁

如何使linktable线程安全呢?

读写锁
什么是函数的可重入性?

可重入(reentrant)函数可以由多于一个任务并发使用,
而不必担心数据错误。相反,不可重入(non-reentrant)
函数不能由超过一个任务所共享,除非能确保函数的互斥
(或者使用信号量,或者在代码的关键部分禁用中断)。
可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。
可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

可重入函数:

这就不是一个可重入函数
int a = 0;
public void sat(){a++;print(a);
}
对比一下
这就是一个可重入函数
public void sat(int a){a++;print(a);
}


不为连续的调用持有静态数据。

不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。绝不调用任何不可重入函数。

什么是线程安全?

如果你的代码所在的进程中有多个线程在同时运行,
而这些线程可能会同时运行这段代码。
如果每次运行结果和单线程运行的结果是一样的,
而且其他的变量的值也和预期的是一样的,就是线程安全的。

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

函数的可重入性与线程安全之间的关系

可重入的函数不一定是线程安全的;

可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);

不可重入的函数一定不是线程安全的;

五、科大软件工程(孟宁)(5:多线程)相关推荐

  1. 【系统分析师之路】第五章 软件工程记忆敲出

    [系统分析师之路]第五章 软件工程记忆敲出 系统分析师软件工程记忆敲出 [系统分析师之路]第五章 软件工程记忆敲出 一. 信息系统生命周期 二. 统一开发过程的概念 三. 净室软件工程的概念 四. 逆 ...

  2. 二、科大软件工程(孟宁)(2)

    软件工程是一门实践性很强的课程 层次 3.模块重用 4.可重用函数和线程安全 1.程序的{}规范 程序的分界符'{'和'}'应独占一行并且位于同一列,同时与引用它们的语句左对齐.{ }之内的代码块在' ...

  3. 三、科大软件工程(孟宁)(3:代码风格)

    代码是给程序员看的: 要有良好的代码风格: 缩进使用四个空格比较好: 注释以100个字符的宽度为准: 行宽小于100个字符: 复杂表达式中用()清晰表达 {}分别独占一行 命名{}独占一行 注释尽量使 ...

  4. 一、科大软件工程(孟宁)(1)

    ls:list的简写列出所有的文件和目录 cd:changedir-改变目录cd / 根目录,cd - 上一个目录 VIM的使用 三种模式: 一般模式 编辑模式, 命令模式 一开始进入的是一般模式 命 ...

  5. 七、科大软件工程(孟宁)(7:设计方法论)

    六个原则 1.模块化 可以提高代码的可维护性和理解性 耦合和内聚是模块化的两个因素 高内聚低耦合是追求的模块化 2.接口 信息隐藏是由接口定义来达成的. 信息隐藏可以提高软件的可维护性 信息隐藏与内聚 ...

  6. 四、科大软件工程(孟宁)(4:定义接口)

    Interface 三个方面: 1.目标 2.前置条件 3.参数和返回类型 什么鬼??? 接口的分类 有点多

  7. 六、科大软件工程(孟宁)(6:子系统的可重用设计和代码背后的思想)

    对于复杂的工程文件,可以使用这个gcc linktable.c menu.c test.c -o menu 但是可以使用makefile做 内容: ![写一个makefile,但是主义的是gcc为ta ...

  8. 保研中科大软件工程(还有南开offer,厦大offer,山大offer,软件所offer,南大替补补到offer,东南替补补到offer,浙大替补)

    0.个人背景: 华东某四非,新兴工科专业,专业排名1/65,学院排名1/263,国家奖学金,CET-6 462,只有一点水奖,例如:蓝桥杯全国软件和信息技术专业人才大赛江苏赛区C/C++程序B组二等奖 ...

  9. 冠名教授|香港科大石孟泽教授获颁陈玉树商学教授席

    自2017年起,香港科技大学设立「冠名教授席」计划,通过社会人士和企业的捐赠设立和颁授崇高荣誉,予校内杰出学者,表扬及肯定其在学术领域的投入和贡献,建立优秀的师资团队,以及延揽全球和区内顶尖优秀学者加 ...

最新文章

  1. Mybatis入门:1(Mybatis框架的环境搭建)
  2. Java中实现DES加解密的一个类
  3. CONVT_NO_NUMBER
  4. java+mysql性能优化_Java培训实战教程之mysql优化
  5. 怎么测试ajax get请求,为什么我的AJAX在运行测试时请求dev中的PUT请求,但请求了GET请求?...
  6. 1. ReactJS基础(开发环境搭建)
  7. 【养成好习惯】使用pipreqs导出本项目使用的环境
  8. video怎么重新加载 vue_vue 事件中更改video的src成功,视频不加载
  9. 个人站立会议(11月16日)
  10. Linux下安装Elasticsearch6.x
  11. CAFFE(FAQ.2):Ubuntu 配置caffe 框架之数据库读取,错误解决:ImportError: No module named leveldb解决办法...
  12. C# button 添加logo
  13. pom env.java home_关于java:aven:POM.xml中缺少工件com.sun:tools:jar:1.6.0编译时异常...
  14. Ubuntu16.04+CUDA9.0+CUDNN7.1+Tensorflow-gpu-1.11.0详细安装教程
  15. 马哥 python培训
  16. go中的interface
  17. 常用计算机防治病毒软件有哪些,如何防治计算机病毒?常用的反病毒软件有哪些?...
  18. java rest 图_java – Serenity Rest服务
  19. java操作Excel:技巧
  20. 记一次网站迁移的过程

热门文章

  1. 地理信息软件属于计算机软件吗,地理信息系统试题名词解释1地理信息系统是在计算机硬软件...
  2. 工作3年程序员晒出9月工资条,直言加班太累
  3. Taichi的学习笔记
  4. [Camera]RK平台摄像头驱动
  5. Androi--Linux下的常用命令行
  6. XMU 数字图像处理实验4 VC/VS MFC 编写JPEG图象读/写程序
  7. A-1077 Kuchiguse (20 分)
  8. 人生的境界,就可以用四个词来概括:苦而不言,笑而不语,迷而不失,惊而不乱。
  9. 基于MATLB软件平台的模拟信号调制解调范例(包含源代码)LSB,AM,DSB
  10. 梯度下降法的神经网络容易收敛到局部最优,为什么应用广泛?