<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                進程通常分為就緒、運行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關系如下: ![](https://box.kancloud.cn/69be931e11fabca03b73985957400d0a_370x249.jpg) 進程三個狀態之間的轉換就是靠PV操作來控制的。PV操作主要就是P操作、V操作和信號量。其中信號量起到了至關重要的作用。 **信號量** 信號量是最早出現的用來解決進程同步與互斥問題的機制。  信號量(Saphore)由一個值和一個指針組成,指針指向等待該信號量的進程。信號量的值表示相應資源的使用情況。信號量S>=0時,S表示可用資源的數量。執行一次P操作意味著請求分配一個資源,因此S的值減1;當S<0時,表示已經沒有可用資源,S的絕對值表示當前等待該資源的進程數。請求者必須等待其他進程釋放該類資源,才能繼續運行。而執行一個V操作意味著釋放一個資源,因此S的值加1;若S<0,表示有某些進程正在等待該資源,因此要喚醒一個等待狀態的進程,使之運行下去。 注意,信號量的值只能由PV操作來改變。      **關于PV操作容易產生的一些疑問:** **1,S大于0那就表示有臨界資源可供使用,為什么不喚醒進程?** S大于0的確表示有臨界資源可供使用,也就是說這個時候沒有進程被阻塞在這個資源上,所以不需要喚醒。 **2,S小于0應該是說沒有臨界資源可供使用,為什么還要喚醒進程?** V原語操作的本質在于:一個進程使用完臨界資源后,釋放臨界資源,使S加1,以通知其它的進程,這個時候如果S<0,表明有進程阻塞在該類資源上,因此要從阻塞隊列里喚醒一個進程來“轉手”該類資源。比如,有兩個某類資源,四個進程A、B、C、D要用該類資源,最開始S=2,當A進入,S=1,當B進入S=0,表明該類資源剛好用完, 當C進入時S=-1,表明有一個進程被阻塞了,D進入,S=-2。當A用完該類資源時,進行V操作,S=-1,釋放該類資源,因為S<0,表明有進程阻塞在該類資源上,于是喚醒一個。 **3,如果是互斥信號量的話,應該設置信號量S=1,但是當有5個進程都訪問的話,最后在該信號量的鏈表里會有4個在等待,也是說S=-4,那么第一個進程執行了V操作使S加1,釋放了資源,下一個應該能夠執行,但喚醒的這個進程在執行P操作時因S<0,也還是執行不了,這是怎么回事呢?** 當一個進程阻塞了的時候,它已經執行過了P操作,并卡在臨界區那個地方。當喚醒它時就立即進入它自己的臨界區,并不需要執行P操作了,當執行完了臨界區的程序后,就執行V操作。 **4,S的絕對值表示等待的進程數,同時又表示臨界資源,這到底是怎么回事?** 當信號量S小于0時,其絕對值表示系統中因請求該類資源而被阻塞的進程數目.S大于0時表示可用的臨界資源數。注意在不同情況下所表達的含義不一樣。當等于0時,表示剛好用完。 以上就是我對PV操作的一些膚淺理解,還請多多指教。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看