交错输出的 没有绝对情况的
如果同时访问共享的数据可能会破坏数据。
对这样的事情加上防范!
并发的程序访问共享的数据一定要注意。
对一些问题敏感的洞察
生产消费者问题:
生产者往缓冲区放东西
消费者从缓冲区拿东西
++ –
切换的可能
count++ 在汇编指令拆分为:
register1 = count
register1 = register1 + 1
count = register1
在任何一条指令结束之后都可能发生中断
我们做到什么保证不会发生数据破坏?
锁! 是个重要的办法 防止中间发生切换
就是可以规定在这段指令之间不许切换,但是带来的问题就是,如果在这段占用过多的CPU、或者不交还CPU操作系统就没有办法。
竞争条件
临界区:
是程序员自己编程序编出来的。自己有责任把它保护好。
就是一段代码
这段代码就是对共享的数据进行访问。什么都有可能
靠经验的。。。
对临界区保护的办法:
任意时刻不会有两个以上的进程在临界区访问。
最常见的就是锁。
得到锁就可以进入临界区,然后把临界区锁上,其他进程进不来,只有进入临界区的进程解开锁其他进程才能进入。
怎么加锁?
不能用共享变量解决这个问题。
三个条件:互斥条件,进度条件,有限等待(公平性)。
终极解决方案:TestandSet方式实现 不可中断原子操作