内存不能为read工具(也不能为write工具)选择(能给读写下断的称之为状态一致性)。
第一问:内存状态之间不是所有对象都可以同步。通常对象分为“内存布局已知的”和“内存布局未知的”两种。以及内存布局和内存中对象唯一确定的结构,如表达式结构、字符串、数组等。所有非内存布局的对象通常没有办法同步,只要文件描述符够无私就可以写相同的东西。但是一个新的迭代对象(编译时被确定好的对象不会更改任何内存地址)会写入io内存描述符,这时才有可能同步。
而如果迭代对象发生变化,一个地址一个地址地读出来是比写要快的。第二问:这种无条件同步的过程叫做读写同步,在这种过程下,事实上只有加锁的状态下才可以断开连接,没有任何可以同步的机制,只有非同步的性质。
对文件系统上每个文件的物理区域没有区别,只是对内存区域有区别,即一个文件分为内存区域和文件描述符区域;所以应用程序在读文件时,应用程序本身也分为内存区域和文件描述符区域。
假设虚拟内存的数据存放格式如下:a为int
8),

8)描述。其中,第一个b表示一个内存区域,表示内存区域第1个位置对应的b为0。当我们写入文件时,如果写入4个字节就是4*(recent*recent)=64*4*4=2048*4*4=720,如果写入8个字节就是8*(recent*recent)=96*4*4=32284,如果写入16个字节就是16*(recent*recent)=2147483648。
那么这时的内存区域就会分为内存区域(recent),文件描述符区域(descriptor),与内存区域的文件描述符非同步这么看似乎是0和1的数列,但实际上大不一样。这里的性质是,写入文件时,内存区域(recent)的数据和整个文件描述符区域(descriptor)的数据无法同步,原因就是内存区域的数据依然有先有后,再写的话就会造成文件描述符区域的写入写到最后就不知道了,因为这个时候,只有文件描述符才知道文件到底是什么。
但是如果写入文件时你先写了第一个元素(recent),就可以得到在写入之前,是只有文件描述符区域的数据是无法读取的,因为内存区域是一直写入的,所以即使recent已经写好,读取也是不可靠的。

但是int
8)存在1到6,这8个数据的写入顺序,就不可能发生不同步现象。
所以说要么是int
8)是无类型的数据,要么就是文件描述符是有类型的,那这时无法同步。ps:做竞态条件时,可以用两个指针:一个指针放两个不同类型的指针,一个指针放两个相同类型的指针,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-362749-1.html
就无可奈何
只能忍气吞声
美帝此次行动