作業系統中不同的鎖

2021-08-28 05:03:02 字數 935 閱讀 9126

鎖是執行緒同步時的乙個重要的工具,然而作業系統中包含了多種不同的鎖,各種鎖之間有什麼不同呢?

1、訊號量(semaphore)

訊號量分為二元訊號量和多元訊號量,所謂二元訊號量就是指該訊號量只有兩個狀態,要麼被占用,要麼空閒;而多元訊號量則允許同時被n個執行緒占有,超出n個外的占用請求將被阻塞。訊號量是「系統級別」的,即同乙個訊號量可以被不同的程序訪問。

2、互斥量 (mutex)

和二元訊號量類似, 唯一不同的是,互斥量的獲取和釋放必須是在同乙個執行緒中進行的。如果乙個執行緒去釋放乙個並不是它所占有的互斥量是無效的。而訊號量是可以由其它執行緒進行釋放的。

3、臨界區(critical section)

術語中,把臨界區的鎖的獲取稱為進入臨界區,而把鎖的釋放稱為離開臨界區。臨界區是「程序級別」的,即它只在本程序的所有執行緒中可見,其它性質與互斥量相同(即誰獲取,誰釋放)

4、讀寫鎖(read-write lock)

適 用於乙個特定的場合。比如對於一段執行緒間訪問的資料,如果程式大部分時間都是在讀取,而只有很少的時間才會寫入,那麼使用前面幾種鎖時,每次讀取也是同樣 要申請鎖的,而這時其它的執行緒就無法再對此段資料進行讀取。可是,多個執行緒同時對一段資料進行讀取時,是不存在同步問題的,那麼這些讀取時設定的鎖就影響 了程式的效能。讀寫鎖的出現就是為了解決這個問題的。

對於乙個讀寫鎖,有兩種獲取方式:共享(shared)或獨佔 (exclusive)。如果當前讀寫鎖處於空閒狀態,那麼當多個執行緒同時以共享方式訪問該讀寫鎖時,都可以成功;而此時如果乙個執行緒以獨佔的方式訪問該 讀寫鎖,那麼它會等待所有共享訪問都結束後才可以成功。在讀寫鎖被獨佔訪問的過程中,再次共享和獨佔請求訪問該鎖,都會進行等待狀態。

5、條件變數(condition variable)

條件變數相當於一種通知機制。多個執行緒可以設定等待該條件變數,而一旦另外的執行緒設定了該條件變數(相當於喚醒條件變數)後,多個等待的執行緒就可以繼續執行了。

作業系統中的鎖

作業系統內的同步系統,都是使用原子操作實現的。原子操作又是如何實現的呢?一般的作業系統書都是寫使用二值訊號量實現的。即用二值訊號量擋在原子操作的開始和結束,以保護原子操作不被打斷。這個是重要的理論依據,但並不能指導實踐。因為,二值訊號量其實就是對乙個標誌位置位,當然,在置位前必須測試一下二值訊號量。...

作業系統中的鎖的分類

參考 作業系統中的鎖分為兩大類 悲觀鎖和樂觀鎖。1.悲觀鎖 悲觀鎖,pessimistic lock,即這種鎖的 想法 很悲觀 方法執行如果不加鎖就會出事,所以操作必須上鎖,乙個乙個的來。其中重量級鎖 自旋鎖和自適應自旋鎖屬於悲觀鎖。當進入乙個同步 執行緒安全的方法時,需要先獲得該方法的鎖,而退出這...

不同作業系統上遮蔽oracle的作業系統認證方式

windows系統上 如果不想使用者通過作業系統驗證方式登入,可以修改 sqlnet.ora檔案,把 sqlnet.authentication services nts 前面加 注釋掉就可以了。linux系統上 如果不想使用者通過作業系統驗證方式登入,可以建立乙個 sqlnet.ora 檔案,加上...