严格一致性其实从物理定律上来说就是不能实现的(它要求写操作能够瞬间传播出去)。
顺序一致性是可行的,在编程人员中很流行且广泛应用。但是它的性能很差。解决这个问题的方法是放宽一致性的模型。下表以限制程度递减的顺序给出了几种可能的模型。
| 一致性 | 说明 |
| 严格 | 所有的共享访问事件都有绝对时间顺序 |
| 顺序 | 所有进程都以相同的顺序检测到所有的共享访问事件 |
| 因果 | 所有进程都以相同的顺序检测到所有因果联系的事件 |
| 处理器 | PRAM一致性+存储相关性 |
| PRAM | 所有的进程按照预定的顺序检测到来自一个处理器的写操作,来自其他处理器的写操作不必以相同的顺序出现 |
另一措施是引入了明确的同步变量,正如弱一致性,释放一致性和入口一致性所做的那样。下表总结了这三种模式。当进程对普通共享数据变量执行操作时,不能保证它们何时对于其他进程是可见的。只有当访问同步变量后,变化才能传播出去。
| 一致性 | 说明 |
| 弱 | 同步完成后,共享数据才可能保持一致 |
| 释放 | 当离开临界区时,共享数据就保持一致 |
| 入口 | 当进入临界区时,和该临界区相关的共享数据保持一致 |
这三种模型的不同在于其同步机制如何工作。但在这三种情况中,它们都可在一个临界区中执行多重的读写操作,而不引起数据传输。当临界区的操作完成后,最后结果或者广播发送给其他进程或准备就绪在其他进程需要时再发送出去。
Comments (4)
多线程编程?
LZ备案拍照了么?
@grapeot
我是被备案的:
http://fjcainfo.miitbeian.gov.cn/icp/publish/query/icpMemoInfo_login.action?id=1675700
写的不错,很受用!