freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)畢業(yè)設(shè)計(jì)外文翻譯--現(xiàn)代并發(fā)抽象c#-文庫吧資料

2025-05-21 17:12本頁面
  

【正文】 popular, particularly in its current object oriented form of threads and object bound mutexes, but it has been provided at most as a veneer of syntactic sugar for optionally locking objects on method calls. Many things have changed in concurrency since monitors were introduced. Communication has bee more asynchronous, and concurrent putations have to be “orchestrated” on a larger scale. The concern is not as much with the ef?cient implementation 12 and use of locks on a single processor or multiprocessor, but with the ability to handle asynchronous events without unnecessarily blocking clients for long periods, and without deadlocking. In other words, the focus is shifting from shared memory concurrency to message or event oriented concurrency. These new requirements deserve programming constructs that can handle asynchronous munications well and that are not shackled to the shared memory approach. Despite the development of a large collection of design pat terns [Lea 1999] and of many concurrent languages [America 1989。 Detlefs et al. 1998。 附件 2:外文原文 Modern Concurrency Abstractions for C NICK BENTON, LUCA CARDELLI, and CEDRIC FOURNET Microsoft Research 1. INTRODUCTION Languages and Concurrency Concurrency is an important factor in the behaviour and performance of modern code: concurrent programs are dif?cult to design, write, reason about, debug, and tune. Concurrency can signi?cantly affect the meaning of virtually every other construct in the language (beginning with the atomicity of assignment), and can affect the ability to invoke libraries. Despite this, most popular pro gramming languages treat concurrency not as a language feature, but as a collection of external libraries that are often underspeci?ed. Considerable attention has been given, after the fact, to the speci?cation of important concurrency libraries [Birrell et al. 1987。一旦發(fā)生這種情況,兩結(jié)果將被分配到 i 和 j,客戶端將繼續(xù)進(jìn)行。 (out i, out j )。 (args[1], x . secondcb)。 Join2 x = new Join2()。 } } class Client { public static void Main(string[] args) { Service s1 = . . . 。 async second(int snd) { i = fst。 } public void wait(out int i, out int j ) amp。 public Join2() { ?rstcb = new IntCallback(?rst)。這可以編程如下: class Join2 { public IntCallback ?rstcb。 . . . // do some work cb(r)。例如,回調(diào)使用一個(gè)字符串參數(shù),服務(wù)代表,并返回一個(gè)整數(shù),看起來類似于: public delegate async IntCallback(int result)。 } void wait() amp。 async s() { t()。 else t()。為此,我們增加額外的共享狀態(tài): T(),我們不接受新的讀者,idleExclusive(),在我們所提供的獨(dú)占鎖以前選擇主題: 10 class ReaderWriterFair { } . . . // same content as in ReaderWriterPrivate, plus: public void ReleaseShared() amp。例如,上面的代碼,編寫者未必能夠獲得新的讀者只要獨(dú)占鎖獲得一個(gè)共享鎖。 } 僅我們的執(zhí)行和底層操作系統(tǒng)調(diào)度提供基本的公平屬性例如:如果有足夠的等候和弦對象的調(diào)用匹配一個(gè)和弦,那么至少有一個(gè)和弦最終會(huì)運(yùn)行。 } public void Exclusive() amp。 async s() { if (??n == 0) idle()。 s()。 } public void Shared() amp。 async idle() { n = 1。 } private int n = 0。在上面的例子中, n 是有關(guān)的,只有當(dāng)有消息中的()。 } 每一個(gè)版本如下規(guī)定相應(yīng)的要求,不變是鎖狀態(tài)(沒有消息,一條消息空閑(),或單線程的種類和數(shù)量相匹配,目前消息小號 N 0( N))持有該鎖(獨(dú)家線程,沒有線程,或 n 共享的線程)。 } public void Exclusive() amp。 async s(int n) { if (n == 1) idle()。 async s(int n) {s(n + 1)。 async idle() {s(1)。#,它可以只有五 和弦: class ReaderWriter { } ReaderWriter() {idle()。一個(gè)典型的解決這個(gè)問題,使用傳統(tǒng)的并發(fā)原語在 Modula3 給出由,比勒爾 [1989]。每個(gè)客戶的要求,然后釋放,要么共享訪問或獨(dú)占訪問,使用相應(yīng)的共享的公共方法,釋放共享,獨(dú)家,釋放獨(dú)占。 (相反可能有任意數(shù)量的客戶端線程阻塞與掛起的調(diào)用,把獲取,甚至同時(shí)運(yùn)行的語句返回 0 到之前的變量 體。 使用私人異步方法(而不是域)的技術(shù)攜帶狀態(tài)是很常見的和弦的 C#。 含蓄。 獲取和弦。 輸出和弦。有一個(gè)簡單的聲明構(gòu)造和解釋兩個(gè)和弦這是如何工作: 構(gòu)造。 return o。 } public object Get() amp。 } public void Put(object o) amp。把呼叫塊,直到單元格是空的,然后用它的參數(shù)填充單元。 一個(gè)簡單的細(xì)胞類 我們先從一個(gè)簡單的地方細(xì)胞類的實(shí)現(xiàn)。 4。從而 一個(gè)異步方法可以覆蓋一個(gè) void 類型, 委托 void 類型,可以創(chuàng)建一個(gè)異步方法, 一個(gè)異步方法可以實(shí)現(xiàn)一個(gè)接口 void 方法 而不是相反。 // returning to g } } 對于每個(gè)調(diào)用到 f,我們創(chuàng)建了一個(gè)輔助類咚的實(shí)例,為了等待異步答復(fù)消息,這是同步后發(fā)送一些 ?。 public int g (int j ) { t . reply( j )。 return ()。} } public int f (int i) { Thunk t = new Thunk()。 當(dāng)然,這也不是 很難明確方案復(fù)調(diào) C上述交會(huì): class RendezVous { class Thunk { int wait() amp。如果這只因?yàn)榫€程的身份可以得到平等檢查,這個(gè)問題將是相當(dāng)學(xué)術(shù)。 } } 將匹配的雙 F 和 G 的調(diào)用,然后交換它們的值并繼續(xù)。 public int g (int j ) { return j to f 。允許多個(gè)同步調(diào)用出現(xiàn)在一個(gè)單一的復(fù)調(diào)會(huì)給一種潛在的有用的交會(huì)設(shè)施(提供一個(gè)也加入語法允許特定的調(diào)用返回結(jié)果)。類的組成控制一個(gè)復(fù)雜的的打字紀(jì)律,防止“消息不理解為“在運(yùn)行時(shí)的錯(cuò)誤。在該文件中,類(部分)同步的集合可以使用一些繼承運(yùn)營商結(jié)合和轉(zhuǎn)化的模式。我們的目 前的規(guī)則有簡單的優(yōu)勢,但我們指的讀者富爾等。這也是值得觀察,有一個(gè)傳遞閉包操作隱含在我們繼承的限制:如果 f()是重寫,并加入與 g(),然后因?yàn)?g()必須被覆蓋,所以必須任何方法 H()加入與 g()等。請注意,在繼承的限制手段,如聲明 virtual void f () amp。 更務(wù)實(shí)的態(tài)度,消除對繼承的限制,使得這一切太容易引入無意僵局(或“異步泄漏”)。 virtual async g () { /? body1 ?/ } virtual void f () amp。方法重寫時(shí),他們所有的復(fù)調(diào)還必須完全重寫。 [2020]連接的情況下討論了“繼承異?!蔽⒎e分)。 這些條件大多是相當(dāng)簡單的,但條件 2 和 9 值得我們進(jìn)一步的評論。 ( 8)如果它是一個(gè)值類(結(jié)構(gòu)),那么只有靜態(tài)方法可能會(huì)出現(xiàn)在不平凡的復(fù)調(diào)。 ( 6)的方法,頭必須全部申報(bào)的實(shí)例方法或所有聲明的靜態(tài)方法。 ( 4)在方法頭中出現(xiàn)的所有形參必須有鮮明的標(biāo)識。 在一個(gè)單一的復(fù)調(diào)聲明: ( 2)最多的一種方法頭可能有非異步的返回類型。 我們呼吁復(fù)調(diào)聲明微不足道 的,如果它宣布一個(gè)單一的,同步的方法(即它是一個(gè)標(biāo)準(zhǔn)的 C 方法聲明)。在類成員的聲明中,我們更換方法聲明 chorddeclaration : := methodheader [amp。非正式規(guī)范 語 法 到 C 語法的語法擴(kuò)展 [ECMA 2020, Appendix C]是非常次要的。如果有排隊(duì)調(diào)用 Put()s,那么哪一個(gè)同步隨后 Get()是不確定的。 } 6 } 現(xiàn)在我們已經(jīng)定義為數(shù)據(jù)緩沖區(qū)的方法之一,但有兩個(gè)把它的方法(其中發(fā)生類型,而不是要區(qū)分比名)。 } public string Get() amp。例如: public class Buffer { public string Get() amp。緩沖區(qū)的例子定義了兩個(gè)方法使用一個(gè)單一的復(fù)調(diào)。除了這個(gè)原子性的保證,然而,有沒有監(jiān)視器像復(fù)調(diào)機(jī)構(gòu)之間的相互排斥的。需要鎖定(例如,以防止參數(shù)返回兩個(gè)不同的獲取到一個(gè)單放)自動(dòng)生成由編譯器。只是,如果沒有這樣的方法(即在弦的所有方法都是異步)運(yùn)行在一個(gè)新的線程,在這種情況下,有沒有要返 回的值。答案是,在任何給定的弦,最多的一種方法可能是同步的。 請注意,執(zhí)行緩沖不涉及產(chǎn)生任何主題:復(fù)調(diào)本身在運(yùn)行時(shí),它在一個(gè)已經(jīng)存在的線程(即一個(gè)名為 Get())。 (buff . Get() + buff . Get())。 buff . Put(“blue”)。 如果沒有掛起調(diào)用的 (),然后調(diào)用到 buff . Put(s)僅僅是排隊(duì),直到一個(gè)個(gè)到達(dá)。 如果是以前匹配過的來電 buff . Put(.),然后調(diào)用 BUFF. get()方法阻塞,直到另一個(gè)線程提供了一個(gè)匹配的 put()。如果 buff 是緩沖和一個(gè)調(diào)用同步方法的 ]的一個(gè) buff . Get()實(shí)例。 string Get()方法是一個(gè)同步的方法不接受參數(shù)并返回一個(gè)字符串。 public async Put(string s) { return s。身體 只執(zhí)行一次所有的方法,在頭被稱為方法調(diào)用隱含排隊(duì)等候,直到 /除非是有現(xiàn)代并發(fā)抽象為 C#匹配的復(fù)調(diào)。復(fù)調(diào)(也被稱為“同步模 5 式”,或“加盟模式”)由一個(gè)頭和一個(gè)身體。更常見的異步方法是使用如下所述的復(fù)調(diào),定義,不一定需要新的線程。由于異步方法立即返回,方法的調(diào)用如下 : async postEvent(EventInfo data) { // large method body } 是唯一可以合理地調(diào)用立即返回,“大被安排在不同的線程執(zhí)行方法體“(無論是一個(gè)新的催生了以服務(wù)這個(gè)呼叫,或者從一些游泳池的工人)。他們使用 async 關(guān)鍵字,而不是宣
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1