linux核心並發基本概念

來源:互聯網
上載者:User

標籤:style   blog   http   ar   color   sp   for   on   2014   


在討論linux核心並發之前,我們先來分享一個情景。

字元數組array是一個核心全域數組,執行函數ArrayWrite_A的線程稱為線程A,執行函數ArrayWrite_B的線程稱為線程B。線程A和線程B均可訪問全域數組array,ArrayWrite_A函數實現的功能是將數群組成員依次從0遞增賦值到9,ArrayWrite_B函數實現的功能是將數群組成員全部賦值為1。



假設此時線程A運行到函數ArrayWrite_A,我們期望的結果是函數ArrayWrite_A執行完後,數組array中的成員應該依次存放著0到9。1所示。

我們來類比一下並發的情境。假設此時線程A運行到函數ArrayWrite_A,當函數ArrayWrite_A執行到indexA = 3時,數群組成員被賦值的情況2所示。然而這時,線程A被作業系統發送器切換出去,而調度執行了線程B,此時線程B開始執行函數ArrayWrite_B,假設函數ArrayWrite_B執行完畢,此時線程B被作業系統發送器切換出去,那麼數群組成員被賦值的情況3所示。此時線程A得到重新調度執行,等到線程A執行完函數ArrayWrite_A時,數群組成員的賦值情況4所示。此時,我們看到,全域數組array中的成員賦值情況,即不是線程A所期望的,也不是線程B所期望的。這樣一個過程就稱為競態。

通過這個情境,只是希望來協助大家來理解linux核心並發相關的概念。全域數組array稱為共用資源,共用資源能夠被多個線程或進程訪問,共用資源可以使軟體資源,如全域變數、共用記憶體等,也可以是硬體資源,硬體資源的共用也很容易理解,例如你一邊用視頻播放器看著電影,一邊用音頻播放器聽這音樂,那麼你的音效卡資源就被兩個進程共用了。臨界區呢?臨界區就是訪問共用資源的程式碼片段,這裡需要理解的是臨界區指的是代碼,這段代碼能夠訪問共用資源,在函數ArrayWrite_A和函數ArrayWrite_B中,for迴圈中的代碼就是臨界區。

 

linux核心並發基本概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.