linux鎖機制分析

1、讀寫鎖(rwlock)運行機制

        讀寫鎖分爲讀鎖(也稱共享鎖),寫鎖(也稱排他鎖,或者獨佔鎖):

        第一、要操作的數據區被上了讀鎖:

       1、請求是讀數據時,上讀鎖,多個讀鎖不排斥(在訪問數據的讀者上限未達到時,可以對該數據區再上讀鎖);

       2、請求是寫數據,則不能馬上上寫鎖,而是要等到數據區的所有鎖(包括讀鎖和寫鎖)都釋放掉後才能開始上寫訪問。

       第二、要操作的數據區上了寫鎖:

       則不管是什麼請求都必須等待數據區的寫鎖釋放掉後才能上鎖訪問。


2、RCU鎖機制

       第一、寫數據的時候,不需要像讀寫鎖那樣等待所有鎖的釋放。而是會拷貝一份數據區的副本,然後在副本中修改,等待修改完後。用這個副本替換原來的數據區, 替換的時候就要像讀寫鎖中上寫鎖那樣,等到原數據區上所有訪問者都退出後,才進行數據的替換;根據這種特性可以推斷出,用RCU鎖可以有多個寫者,拷貝了 多份數據區數據,修改後各個寫着陸續的替換掉原數據區內容。

       第二、讀數據的時候,不需要上任何鎖,也幾乎不需要什麼等待(讀寫鎖中如果數據區有寫鎖則要等待)就可以直接訪問數據。寫數據中替換原數據時,只要修改指針就可以,消耗的時間可以幾乎可以忽略,所以讀數據不需要其他額外開銷。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章