C#中的primefaces操作是什么?
有没有一种系统的方式来知道在C#中的操作将是primefaces或不是? 还是有任何一般的指导方针或经验法则?
对于更完整/详细的内容:
读取和写入32位值types是primefaces的:这包括以下内在值(结构)types:bool,char,byte,sbyte,short ushort,uint,float。 以下types(其中包括)不能保证是primefaces的:小数,双倍,长,超长。
例如
int x; x = 10; // atomic decimal d; d = 10m; // not atomic
引用分配也是一个primefaces操作:
private String _text; public void Method(String text) { _text = text; // atomic }
是。 阅读CLI规范: http : //www.ecma-international.org/publications/standards/Ecma-335.htm 。 例如:
I.12.6.6primefaces读写
一致性CLI应保证当所有的写访问到一个位置的时候,对正确alignment的不大于本地字大小(原生inttypes的大小)的内存位置的读写访问是primefaces的(参见§I.12.6.2)相同的大小。 primefaces写入不应改变写入的内容。 除非使用明确的布局控制(请参阅分区II(控制实例布局))来更改默认行为,否则不得大于自然字大小(本地int的大小)的数据元素应正确alignment。 对象引用应被视为以原始字大小存储。
[注意:关于内存的primefaces更新(读 – 修改 – 写)没有保证,除了作为类库的一部分提供的方法(见分区IV)。 在不支持对小数据项的直接写入的硬件上进行primefaces读取/修改/写入时,需要primefaces写入“小数据项”(不大于本地字大小的项目)。 尾注]
[注意:当本地int的大小是32位时,即使某些实现可能在数据在8字节边界上alignment时执行primefaces操作,也不能保证对8字节数据的primefaces访问。 尾注]
关于64位长的问题,Eric Lippert在这里回答: http : //blogs.msdn.com/b/ericlippert/archive/2011/05/31/atomicity-volatility-and-immutability-are-different-part- two.aspx
CLI规范实际上做出了更强的保证。 CLI保证读取和写入处理器的自然指针大小(或更小)的值types的variables是primefaces的; 如果您在64位版本的CLR中的64位操作系统上运行C#代码,则64位双精度和长整数的读写操作也将保证为primefaces。 C#语言不能保证,但运行时规范。 (如果您在某些环境中运行C#代码,但是某些CLI没有实现,那么您当然不能依赖该保证;如果您想知道提供哪些保证,请联系向您销售运行时的供应商。)
关于primefaces访问的另一个细微之处是,底层处理器只有在被读取或写入的variables与存储器中的正确位置alignment的存储相关联时才保证primefaces性。 最终,variables将作为指向内存的指针来实现。 在一个32位的操作系统上,这个指针必须被4整除,以保证读或写是primefaces的,在64位的操作系统上,它必须被8整除。
从CLI规范你可以在这里得到:
“符合CLI的应保证对正确alignment的内存位置的读写访问不超过本地字大小(本地inttypes的大小)是primefaces的…”
这里的C#规范的第12.5节:
“对以下数据types的读写操作应该是primefaces的:bool,char,byte,sbyte,short,ushort,uint,int,float和referencetypes。”另外:“…不能保证primefaces读取 – 修改 – 写,如增加或减less的情况。“
用这个做增量操作。