Solaris 中的程序同步
Solaris 實現各種鎖來支援多工、多執行緒和多處理。它使用自適應互斥量、條件變數、訊號量、讀寫鎖、旋轉門來控制對臨界區的訪問。
自適應互斥量用於保護每個僅由短程式碼段訪問的關鍵資料項。
在多處理器系統上,它從標準訊號量自旋鎖開始。如果鎖由在另一個 CPU 上執行的執行緒持有,則執行緒自旋。如果鎖由當前處於執行狀態的執行緒持有,則執行緒阻塞,進入睡眠狀態,直到被釋放鎖的訊號喚醒。
如果程式碼段較長,則自旋等待方法效率極低。因此,條件變數、訊號量被用於它們。
Solaris 提供讀寫鎖來保護通常以只讀方式被長程式碼段頻繁訪問的資料。
它使用旋轉門來排序等待獲取自適應互斥量或讀寫鎖的執行緒列表。旋轉門是一種包含阻塞在鎖上的執行緒的佇列結構。它們是每個鎖持有執行緒的,而不是每個物件的。旋轉門根據優先順序繼承進行組織,這使得執行執行緒具有其旋轉門中執行緒的最高優先順序,以防止優先順序反轉。
核心使用的鎖定機制也被使用者級執行緒使用,以便鎖在核心內部和外部都可用。唯一的區別在於優先順序繼承僅在核心中使用,使用者級執行緒不提供此功能。
為了最佳化 Solaris 的效能,開發人員改進了鎖定方法,因為鎖被頻繁使用,並且通常用於關鍵的核心功能,調整它們的實現和使用以獲得更高的效能。
廣告