您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何理解C#線程同步”,在日常操作中,相信很多人在如何理解C#線程同步問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解C#線程同步”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
在向大家詳細(xì)介紹C#線程同步之前,首先讓大家了解下C#線程的中止,然后全面介紹C#線程同步。
C#線程的中止
由于能夠在沒有任何征兆的情況下使運行的程序進(jìn)入一種混亂的狀態(tài),Java中的Thread.stop受到了普遍的反對。根據(jù)所調(diào)用的stop()方法,一個未經(jīng)檢查的java.lang.ThreadDeath錯誤將會破壞正在運行著的程序的棧,隨著它的不斷運行,能夠解除任何被鎖定的對象。由于這些鎖被不分青紅皂白地被打開,由它們所保護(hù)的數(shù)據(jù)就非??赡芟萑牖靵y狀態(tài)中。
根據(jù)當(dāng)前的Java文檔,推薦的中止一個線程的方法是讓運行的線程檢查一個由其他的線程能夠改變的變量,該變量代表一個“死亡時間”條件。下面的程序就演示了這種方法。
// 條件變量 private boolean timeToDie = false; // 在每次迭代中對條件變量進(jìn)行檢查。 class StoppableRunnable extends Runnable { public void run() { while( !timeToDie ) { // 進(jìn)行相應(yīng)的操作 } } }
上述的討論對C#中的Abort方法也適合。根據(jù)調(diào)用的Abort方法,令人捉摸不定的System.Threading.ThreadAbortException可能會破壞線程的棧,它可能釋放線程保持的一些變量,使處于保護(hù)狀態(tài)中的數(shù)據(jù)結(jié)構(gòu)出現(xiàn)不可預(yù)測的錯誤。我建議使用與上面所示的相似的方法來通知一個應(yīng)該死亡的線程。
C#線程同步
從概念上來看,線程非常易于理解,實際上,由于他們可能交互地對同一數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,因此它們成為了令編程人員頭疼的一種東西。以本文開始的 ThreadingExample為例,當(dāng)它運行時,會在控制臺上輸出多種不同的結(jié)果。從 1 2 3 4 5 1 2 3 4 5到 1 1 2 2 3 3 4 4 5 5或 1 2 1 2 3 3 4 5 4 5在內(nèi)的各種情況都是可能出現(xiàn)的,輸出結(jié)果可能與操作系統(tǒng)的線程調(diào)度方式之間的差別有關(guān)。有時,需要確保只有一個線程能夠訪問一個給定的數(shù)據(jù)結(jié)構(gòu),以保證數(shù)據(jù)結(jié)構(gòu)的穩(wěn)定,這也是我們需要C#線程同步機(jī)制的原因所在。
為了保證數(shù)據(jù)結(jié)構(gòu)的穩(wěn)定,我們必須通過使用“鎖”來調(diào)整二個線程的操作順序。二種語言都通過對引用的對象申請一個“鎖”,一旦一段程序獲得該“鎖”的控制權(quán)后,就可以保證只有它獲得了這個“鎖”,能夠?qū)υ搶ο筮M(jìn)行操作。同樣,利用這種鎖,一個線程可以一直處于等待狀態(tài),直到有能夠喚醒它信號通過變量傳來為止。
C#線程同步例子:
public static Object synchronizeVariable = "locking variable"; public static void count() { synchronized( synchronizeVariable ) { for( int count=1;count<=5;count++ ) { System.out.print( count + " " ); synchronizeVariable.notifyAll(); if( count < 5 ) try { synchronizeVariable.wait(); } catch( InterruptedException error ) { } } } }
到此,關(guān)于“如何理解C#線程同步”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。