一、回顾——cpu流水线
CPU指令流水线 阻塞一个时钟周期- 流水线三种冒险:
- 结构冒险(同一个时刻都要用计算单元)
- 数据冒险(数据依赖上一次的计算结果)
- 分支冒险(取指令需要依赖if判断结果)
二、多线程的问题
- 是否存在结构冒险?
火车订票系统,只有最后一张票,但有2个客户试图争夺这张火车票。
- 是否存在数据冒险?
线程A读取mysql数据,线程B打印数据,他需要等待A的完成。
- 是否存在分支冒险?
还未想到:(
三、归纳
- 结构冒险特点:
1、独占有限资源
2、同时处理
- 数据冒险特点:
1、协作关系
四、推广
- 结构冒险——活跃性问题
同一张火车票被A占有了,B处于等待。如果A不退票,B就一直等待下去。
- 数据冒险——安全问题
多线程如果没有使用良好的协作机制,执行顺序不可预见,容易导致结果不是我们想要的。
线程A读取mysql数据,线程B打印数据,他需要等待A的完成。如果没有人控制让B等待A的结果,可能B会在A读取数据之前将“非法”数据打印出来。
网友评论