竞态条件 一二事

竞态条件

如果程序运行顺序的改变会影响最终结果,这种情况即竞态条件,即程序的不同执行流,执行顺序的不同,导致程序运行结果不同

导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件
关于临界区、临界资源的分析可见另一篇博客

重入

先看一下下面的实例:
有两个PCB(p1,p2)分别要对一个全局变量 val = 10 进行 – 的操作,正常情况下结果应该是 8 ,但在临界资源的访问 + 操作系统对进程的调度下,可能会导致 p1 先将数据进行寄存未修改,p2 就已经占用 CPU 进行数据寄存和修改 val 为 9,之后再进行 p1 的修改,p1根据上下文信息将未修改前的 val (10)进行修改,依旧得到 9

重入:不同的执行流可以访问同样的资源(同样的代码)

可重入:不同的执行流可以访问同样的资源,不会对程序的结果产生影响
不可重入:不同的执行流可以访问同样的资源,但会对程序的结果产生影响

全局变量、malloc、free 及 STL 当中大部分容器都是不可重入的

发布了47 篇原创文章 · 获赞 108 · 访问量 4709

猜你喜欢

转载自blog.csdn.net/qq_44759710/article/details/104407733