codecamp

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)到副作用是否会以原有的程序顺序出现。
C# 自动内存管理
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }