信號量與互斥鎖區別


信號量與互斥鎖之間的區別:

互斥量用於線程的互斥,信號線用於線程的同步。  
這是互斥量和信號量的根本區別,也就是互斥和同步之間的區別。  


互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。  
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源  

 

 

信號量經典舉例

題目描述:白子和黑子各有32個,黑子先行怎樣設置信號量,才能黑子先行,且是交替下子

解答:

信號量: 

白子可下嗎? s1 = 0

黑子可下嗎? s2 = 1

     白                                             黑

for(i=0;i<32;i++){                   for(i=0;i<32;i++){                             

   取子                                          取子       

   P(s1)                                        P(s2)         

   放白子                                       放黑子     

   V(s2)                                        V(s1)

}                                              }

 注意:正是因為設置了兩個信號量s2與s1,才實現了黑子先行的策略,因為一開始s2=1,s1=0,而黑子首先判斷的是s2,所以這個時候黑子可以走了,而白字判斷的是S1,這個時候s1=0,所以,白字需要等待。黑子下完以后,講s1置為1,這個時候白字才能走,很巧妙。

 

 

越獄》寄信

 

 

 題目描述:T-boy給brad送信,Mike給Lincon送信,但他們送信收信都通過同一個樹洞。

 

信號量:

Lincon: 是否有Mike的信,s1 = 0

Brad:    是否有T-boy的信,s2 = 0

Mike和T-boy: 樹洞是否為空,s3 = 1

 

Mike:                    T-boy:                 Lincon:                 Brad:

write()                  write()                P(s1)                    P(s2)                               

 

P(s3)                    P(s3)                  getit()                   getit()                                    

 

putit()                   putit()                 V(s3)                   V(s3)                                           

 

V(s1)                     V(s2)                 readit()                 readit()

 

 

 

題目描述:四個人進行接力賽跑,要求使用信號量的方法使得跑的順序是P1->P2->P3->P4

解答:

信號量:

s2:2號接棒 0

s3:3號接棒 0

s4:4號接棒 0

 

P1                P2                 P3                       P4

 

                  P(s2)             P(s3)                   P(s4)                    

run             run                 run                      run               

V(s2)          V(s3)             V(s4)              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM