<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      操作系統(一)—— 進程同步

      前言

      下一篇章打算講解 AQS ,在去熟悉 AQS 原理之前,我想我們得知道一個事物是因何而產生,它出現的動機;AQS 作為一種高級的同步機制,討論 AQS 則避免不了談及操作系統以及 Java 實現的其他同步機制,正是因為其他同步機制存在一些缺陷或是限制才會有 AQS;由于同步機制的篇幅并不短,因此單獨開一文進行闡述。

      概念介紹

      臨界區

      Consider a system consisting of n processes {P0, P1, ..., Pn?1}. Each process has a segment of code, called a critical section, in which the process may be accessing — and updating — data that is shared with at least one other process.

      當多個進程訪問(包含線程,此文以進程來講解,后續只說進程)共享資源時,這些進程訪問共享資源的代碼就稱作臨界區。臨界區的關鍵是在同一時刻只能有一個進程執行臨界區。

      臨界資源

      在同一時刻只能允許一個進程訪問的共享資源稱作臨界資源。同一時刻只能允許一個進程訪問,即是因為有多個進程同時訪問共享資源會造成錯誤,如多個進程調度打印機,多個進程需要有序執行,當一個進程執行完畢下一個線程才能執行,否則打出來的內容就串了;

      進程之間的制約

      1. 直接制約:當一個進程訪問臨界資源結束后,另一個進程依賴于上一個進程的計算結果,例如做 count++ 操作,如果沒有次序依賴保證,加出來的結果就可能是錯誤的。
      2. 間接制約:即上面舉的打印機的例子,即使兩個線程之間沒有數據依賴關系,但是并不能同時執行,否則會出現錯誤。

      互斥

      互斥即間接制約,線程訪問共享資源相互排斥,互斥強調的是搶占

      同步

      同步即直接制約,同步強調的是協作

      同步和互斥通常成對出現,但是很明顯,同步也實現了互斥,通常意義上我們說的同步即涵蓋了同步和互斥,下文則只說同步,就不說同步互斥。

      進程同步工具

      為何需要進程同步?

      多進程協作下,多個進程共享邏輯空間,可以訪問到共享的資源,在并發訪問的情況下會出現數據的不一致,所以需要引入同步機制對進程訪問做順序的控制。

      Mutex

      Mutex 又稱互斥鎖,互斥鎖提供一個狀態變量、加鎖解鎖操作、等待隊列。進程在進入臨界區之前先進行加鎖操作,且變更鎖的狀態表明鎖不可用,當其他進程想要進入臨界區的時候同樣要進行加鎖操作,但因鎖不可用所以加鎖失敗,需要等待獲得鎖的線程釋放鎖之后才能加鎖成功,如此便保證了進程互斥的進入臨界區。
      等待隊列不是必須的,可以使用自旋替代,即當線程獲取鎖失敗的時候進行空轉等待鎖釋放,這有個好處是可以避免兩次上下文切換,但是由于空轉沒有釋放 CPU ,影響其他進程處理任務,所以通常互斥鎖都會提供一個等待隊列,等待是廣泛意義上說的等待,線程可以處于 wait 狀態也可以是 block 狀態。

      Semaphore

      Semaphore 即信號量,信號量是根據資源數量對進程進行狀態管理的一種機制,信號量在狹義上可以指這個機制中的整型數,信號量提供一個大于零的整型數和兩個操作。兩個操作是 wait() 和 signal(), 在 Dijkstra 提出這個概念的時候這兩個操作也叫做 P 操作和 V 操作。信號量機制的工作原理是初始化一個整數為可以訪問的共享資源的數量,當進程需要訪問臨界資源的時候先進行 P 操作,表明占據了一個資源,當使用完畢后進行 V 操作釋放資源,P 操作會對整數減 1,V 操作對整數加 1,如果該整數為 0,那么進程就無法訪問資源。
      信號量分為兩種:

      • 互斥信號量, 信號量的值為 0 或 1,也叫二進制信號量
      • 計數信號量,信號量使用一個較大的范圍,介于 0~n 之間

      Monitor

      Monitor 在操作系統中也被譯作管程,管程是高級操作。Semaphore 和 Mutex 都是低級操作,為操作系統層面的實現,通常用來構建更高級的同步工具。信號量和互斥鎖的使用都比較復雜,使用不當很容易造成錯誤。管程即是為了解決信號量這種狀態和操作分散且由應用程序員控制的問題,管程的思想是將數據、變量、操作封裝到一個模塊,可以理解為對信號量的操作和數據的封裝,避免信號量中PV操作配對錯誤的情況。管程通過限制同一時刻只能有一個進程(線程)進入管程來達到互斥的目的。管程在 Java 中的實現以 HotSpot 為例是 ObjectMonitior.cpp,具體應用體現在 Synchronized 關鍵字,關于 Monitor 的詳情可以見多線程與高并發(一)—— 自頂向下理解Synchronized實現原理

      參考資料

      [1] 《Operating System Concepts (Abraham Silberschatz, Greg Gagne etc.)》

      posted @ 2022-07-24 15:27  onAcorner  閱讀(123)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 伊人大杳焦在线| 国产女人喷潮视频免费| 国产亚洲无线码一区二区| 国产无遮挡猛进猛出免费软件| 国产无遮挡免费视频免费| 中文字幕av国产精品| 亚洲中文字幕无码专区| 九九热在线视频精品免费| 视频一区二区三区高清在线| 欧美成人精品手机在线| 午夜av高清在线观看| 国产一区二区三区色视频| 日韩精品一卡二卡三卡在线| 麻豆人妻| 亚洲熟妇自偷自拍另欧美| 国产自拍在线一区二区三区| 亚洲国产另类久久久精品黑人| 日韩精品有码中文字幕| 999福利激情视频| 99久久国产福利自产拍| 在线 欧美 中文 亚洲 精品| 涩涩爱狼人亚洲一区在线| 亚洲综合91社区精品福利| 欧美精品18videosex性欧美 | 国产a在视频线精品视频下载| 亚洲av无码牛牛影视在线二区| 亚洲欧美中文日韩V日本| 沾化县| 久久精品国产99国产精品亚洲| 久久精品国产亚洲av熟女| 国产乱人伦av在线无码| 亚亚洲视频一区二区三区| 老司机亚洲精品一区二区| 亚洲精品欧美综合二区| 亚洲精品日韩精品久久| 在线精品另类自拍视频| 午夜毛片精彩毛片| 成人午夜国产内射主播| 国产va免费精品观看| 日日碰狠狠添天天爽超碰97| WWW丫丫国产成人精品|