C# 執(zhí)行順序

2018-09-28 18:42 更新

執(zhí)行順序

C# 程序執(zhí)行處理是這樣進(jìn)行的,每一個(gè)執(zhí)行線程的副作用都保持在臨界執(zhí)行點(diǎn)(critical execution points)上。副作用被定義為:無(wú)定性字段(volatile field)的讀寫(xiě)、非無(wú)定性變量(non-volatile variable)的寫(xiě)入、外部資源(external resource)的寫(xiě)入以及拋出異常。按照這個(gè)副作用定義的順序,臨界執(zhí)行點(diǎn)分別是指:引用一個(gè)無(wú)定性字段(volatile fields,第十章第 5.3 節(jié))、引用 lock 語(yǔ)句(第八章第十二節(jié))以及引用線程的創(chuàng)建與終止。執(zhí)行環(huán)境在遵照下列限制的前提下自由改變執(zhí)行順序:

  • 在執(zhí)行線程中保持?jǐn)?shù)據(jù)依賴性。也就是說(shuō),計(jì)算每一個(gè)變量的值時(shí),就好似在線程里所有語(yǔ)句都按照原本程序的順序執(zhí)行的。
  • 保留初始化的排序規(guī)則(第十章第 5.4 節(jié)和第十章第 5.5 節(jié))。
  • 對(duì)于無(wú)定性的(volatile)讀和寫(xiě)(第十章第 5.3 節(jié)),副作用(side effects)的順序保持不變。另外,如果執(zhí)行環(huán)境可以推斷(deduce)一個(gè)表達(dá)式的值不會(huì)被使用并且不會(huì)產(chǎn)生有效的(needed)副作用(包括所有因調(diào)用方法或訪問(wèn)無(wú)定性字段所導(dǎo)致的副作用)的話,那么就不需要去計(jì)算表達(dá)式的每一個(gè)部分。當(dāng)程序執(zhí)行被一個(gè)異步(asynchronous)事件(諸如由另一個(gè)現(xiàn)成拋出異常)中斷(interrupted),就不能保證(guaranteed)可觀察(observable)到副作用是否會(huì)以原有的程序順序出現(xiàn)。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)