作業系統鎖的種類
作業系統中包含了多種不同型別的鎖。下面由小編為大家整理了作業系統的鎖的種類相關知識,希望對大家有幫助!
鎖是執行緒同步時的一個重要的工具,然而作業系統中包含了多種不同的鎖,各種鎖之間有什麼不同呢?
1、訊號量***Semaphore***
訊號量分為二元訊號量和多元訊號量,所謂二元訊號量就是指該訊號量只有兩個狀態,要麼被佔用,要麼空閒;而多元訊號量則允許同時被N個執行緒佔有,超出N個外的佔用請求將被阻塞。訊號量是“系統級別”的,即同一個訊號量可以被不同的程序訪問。
2、互斥量 ***Mutex***
和二元訊號量類似, 唯一不同的是,互斥量的獲取和釋放必須是在同一個執行緒中進行的。如果一個執行緒去釋放一個並不是它所佔有的互斥量是無效的。而訊號量是可以由其它執行緒進行釋放的。
3、臨界區***Critical Section***
術語中,把臨界區的鎖的獲取稱為進入臨界區,而把鎖的釋放稱為離開臨界區。臨界區是“程序級別”的,即它只在本程序的所有執行緒中可見,其它性質與互斥量相同***即誰獲取,誰釋放***
4、讀寫鎖***Read-Write Lock***
適 用於一個特定的場合。比如對於一段執行緒間訪問的資料,如果程式大部分時間都是在讀取,而只有很少的時間才會寫入,那麼使用前面幾種鎖時,每次讀取也是同樣 要申請鎖的,而這時其它的執行緒就無法再對此段資料進行讀取。可是,多個執行緒同時對一段資料進行讀取時,是不存在同步問題的,那麼這些讀取時設定的鎖就影響 了程式的效能。讀寫鎖的出現就是為了解決這個問題的。
對於一個讀寫鎖,有兩種獲取方式:共享***Shared***或獨佔 ***Exclusive***。如果當前讀寫鎖處於空閒狀態,那麼當多個執行緒同時以共享方式訪問該讀寫鎖時,都可以成功;而此時如果一個執行緒以獨佔的方式訪問該 讀寫鎖,那麼它會等待所有共享訪問都結束後才可以成功。在讀寫鎖被獨佔訪問的過程中,再次共享和獨佔請求訪問該鎖,都會進行等待狀態。
5、條件變數***Condition Variable***
條件變數相當於一種通知機制。多個執行緒可以設定等待該條件變數,而一旦另外的執行緒設定了該條件變數***相當於喚醒條件變數***後,多個等待的執行緒就可以繼續執行了。