返回首页 C# 语言规范-基本概念篇

执行顺序

C# 程序执行处理是这样进行的,每一个执行线程的副作用都保持在临界执行点(critical execution points)上。副作用被定义为:无定性字段(volatile field)的读写、非无定性变量(non-volatile variable)的写入、外部资源(external resource)的写入以及抛出异常。按照这个副作用定义的顺序,临界执行点分别是指:引用一个无定性字段(volatile fields,第十章第 5.3 节)、引用 lock 语句(第八章第十二节)以及引用线程的创建与终止。执行环境在遵照下列限制的前提下自由改变执行顺序:

  • 在执行线程中保持数据依赖性。也就是说,计算每一个变量的值时,就好似在线程里所有语句都按照原本程序的顺序执行的。
  • 保留初始化的排序规则(第十章第 5.4 节和第十章第 5.5 节)。
  • 对于无定性的(volatile)读和写(第十章第 5.3 节),副作用(side effects)的顺序保持不变。另外,如果执行环境可以推断(deduce)一个表达式的值不会被使用并且不会产生有效的(needed)副作用(包括所有因调用方法或访问无定性字段所导致的副作用)的话,那么就不需要去计算表达式的每一个部分。当程序执行被一个异步(asynchronous)事件(诸如由另一个现成抛出异常)中断(interrupted),就不能保证(guaranteed)可观察(observable)到副作用是否会以原有的程序顺序出现。
上一篇: 自动内存管理