回覆列表
  • 1 # 用戶2528508616911223

    一:互斥與同步 互斥:一個公共資源同一時刻只能被一個進程或線程使用,多個進程或線程不能同時使用公共資源。 同步:兩個或兩個以上的進程或線程在運行過程中協同步調,按預定的先後次序運行。 解決方法:互斥鎖,條件變量,讀寫鎖,自旋鎖,信號量(互斥與同步) 二:互斥鎖(同步) 互斥鎖是一種簡單的加鎖的方法來控制對共享資源的訪問,互斥鎖只有兩種狀態,即上鎖( lock )和解鎖( unlock )。 特點:唯一性,原子性,非繁忙等待 三:條件變量(同步) 條件變量是用來等待而不是用來上鎖的。條件變量用來自動阻塞一個線程,直 到某特殊情況發生為止。適合多個線程等待某個條件的發生,不使用條件變量,那麼每個線程就不斷嘗試互斥鎖並檢測條件是否發生,浪費系統資源。 四:讀寫鎖(同步) 三種狀態:讀模式下加鎖狀態、寫模式加鎖狀態、不加鎖狀態 【讀寫鎖的特點】: 如果有其它線程讀數據,則允許其它線程執行讀操作,但不允許寫操作; 如果有其它線程寫數據,則其它線程都不允許讀、寫操作。 【讀寫鎖的規則】: 1:如果某線程申請了讀鎖,其它線程可以再申請讀鎖,但不能申請寫鎖; 2:如果某線程申請了寫鎖,其它線程不能申請讀鎖,也不能申請寫鎖。 讀寫鎖適合於對數據結構的讀次數比寫次數多得多的情況。 五:自旋鎖(同步)#include<semaphore.h> 自旋鎖與互斥量功能一樣,唯一一點不同的就是互斥量阻塞後休眠讓出cpu,而自旋鎖阻塞後不會讓出cpu,會一直忙等待,直到得到鎖。自旋鎖在用戶態使用的比較少,在內核使用的比較多!自旋鎖的使用場景:鎖的持有時間比較短,或者說小於2次上下文切換的時間。 六:信號量(同步與互斥) 信號量本質上是一個非負的整數計數器,它被用來控制對公共資源的訪問。 編程時可根據操作信號量值的結果判斷是否對公共資源具有訪問的權限,當信號量值大於 0 時,則可以訪問,否則將阻塞。PV 原語是對信號量的操作,一次 P 操作使信號量減1,一次 V 操作使信號量加1。

  • 蘿蔔絲粉條餡餅的做法?