讀寫自旋鎖
1:什么是自旋鎖?
自旋鎖就是互斥的同步原語,試圖進入臨界區的線程只用忙等的方式檢測鎖的狀態。如果檢測到鎖未被持有,則進入臨界區。因為采用忙等的方式,所以自旋鎖必須是鎖住很小的一塊兒代碼,并且很短的時間片。
2:讀寫自旋鎖?
有些線程在臨界區內只是簡單的讀取一些信息,不會涉及到信息的修改,允許讀取信息的線程進入臨界區不會有危險,同時還可以提高性能。所以將這些線程區分為讀線程和寫線程,從而就有了讀寫自旋鎖。
3:如何使用?
臨界區里面保護的共享資源有可能是一個單一變量,也可能是多個變量或者一個復雜結構的文件。所以每個共享的資源對應一把讀寫自旋鎖。線程只允許采用如下方式來訪問自旋鎖。
1> 申請鎖
2> 獲得鎖之后,讀寫共享資源
3> 釋放鎖
4:自旋鎖滿足四個屬性
1> 互斥:任何時刻讀者寫者不能同時進入臨界區。任意時刻只能至多一個寫者進入臨界區
2> 讀者并發:滿足互斥的前提下,多個讀者可以同時進入臨界區
3> 無死鎖
4> 忙等:讀寫鎖只用于很小的代碼片段,線程等待期間不可以進入睡眠狀態,因為睡眠/ 喚醒非常的耗時,大大延遲了獲得鎖的時間。
5:讀者與寫著競爭獲得鎖的時候,有一定的偏好策略
(1)讀者優先:
如果鎖被讀者擁有,則優先偏好讀者進入臨界區
(2)寫者優先:
寫者在后到的讀者/寫者之前搶到鎖
新聞熱點
疑難解答