1. 程式人生 > >讀寫鎖------程序的同步與互斥

讀寫鎖------程序的同步與互斥

讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於自旋鎖而言,能提高併發性,因為在多處理器系統中,它允許同時有多個讀者來訪問共享資源,最大可能的讀者數為實際的邏輯CPU數。寫者是排他性的,一個讀寫鎖同時只能有一個寫者或多個讀者(與CPU數相關),但不能同時既有讀者又有寫者。

這裡我們出現了一個新的概念,自旋鎖;
鎖分為兩種,一是自旋鎖,即在正處在臨界資源的執行緒很短的時間內將釋放鎖,所以自旋鎖再沒有申請到鎖的情況下,等待的過程中隔一小段時間就去看是否釋放了資源;例如讀寫鎖
第二種是掛起等待鎖,即在沒有申請到資源的情況下,一直掛起等待直到有空閒的資源,例如:訊號量、互斥鎖

讀寫鎖的函式介面
讀寫鎖的初始化與銷燬
這裡寫圖片描述
引數rwlock表示的是一個讀寫鎖,attr是讀寫鎖的屬性,一般設定為NULL;

讀加鎖:
這裡寫圖片描述

寫加鎖
這裡寫圖片描述
rdlock若申請不到鎖,則自旋,tryrdlock若申請不到鎖,則返回,由使用者自旋;

解鎖:
這裡寫圖片描述

讀者—寫者模型
程式碼驗證讀寫鎖
這裡寫圖片描述
這裡寫圖片描述

我們可以通過讓讀者速度快而寫者速度慢來驗證出寫者的優先順序是高於讀者的
這裡寫圖片描述