C 鎖的作用

2021-10-14 07:54:22 字數 1804 閱讀 4920

在研究vins-mono源**時,讀取imu資料和特徵資料時,遇到了c++鎖,所以學習了下鎖。

c++鎖可分為互斥鎖、讀寫鎖(共享鎖),遞迴鎖;

std::mutex mutexx;//普通鎖互斥鎖 //包含在標頭檔案std::recursive_mutex  recursive_mutexx; //遞迴鎖 //包含在標頭檔案std::shared_mutex shared_mutexx; //讀寫鎖  //包含在標頭檔案
互斥鎖是為了避免資料競爭而產生的,即避免多個執行緒同時訪問同乙個資料。當某個執行緒加上互斥鎖後,其他執行緒就阻塞等待該執行緒的鎖解放後獲取這個鎖。以下列**為例。

void helloguangzhou()

}`void hellowworld()

}int main()

輸出為圖下所示,這看起來比較混亂。

hello guangzhou hello world

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello world

hello world

hello guangzhou

hello world

hello guangzhou

hello world

hello world

hello guangzhou

hello world

hello world

hello world

hello world

如果兩個執行緒函式分別加上鎖,即

std::mutex mutexx;

void helloguangzhou()

mutexx.unlock();

}`void hellowworld()

mutexx.unlock();

}

則它的輸出為

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello guangzhou

hello world

hello world

hello world

hello world

hello world

hello world

hello world

hello world

hello world

hello world

讀寫鎖是為了在多個執行緒訪問同乙個資料時,只能有乙個執行緒可以修改該資料,其他執行緒只能訪問。

讀寫鎖分為讀模式和寫模式兩種,在讀模式情況下,寫模式執行緒被阻塞,其他讀模式執行緒可以訪問,即讀模式共享;

在寫模式情況寫,讀模式阻塞,其它寫模式執行緒也阻塞,即寫入唯一。這滿足了讀寫鎖只有乙個執行緒可以修改資料,多個執行緒可以同時訪問資料的條件。

寫模式用lock(),unlock(),unique_lock等方法決定上鎖和解鎖,讀模式用share_lock(),share_unlock(),shared_lock等方法決定上鎖和解鎖

互斥鎖作用的理解

互斥鎖的建立 1.pthread mutex t mutex pthread mutex initializer 2.pthread mutex t mutex pthread mutex init mutex 以上兩種方式都行 互斥鎖在乙個執行緒中的使用pthread mutex t mutex ...

意向鎖的作用

在了解innodb事務併發控制的時候,裡面提到了意向鎖 intention lock 這裡簡單做下總結 在innodb的使用場景中,裡面有實現了行鎖,具體有對行的讀鎖,寫鎖。另外,如果對乙個表作一些統一的操作,表的層面,有表層級的讀鎖,寫鎖。那這個意向鎖是幹嘛用的?我們假設乙個場景,乙個事務a正在寫...

同步鎖的作用範圍

synchronized 解決的三種方式 1 使用synchronized 塊 2 synchronized 同步方法 3 synchronized 同步靜態 使用synchronize 塊通過指定鎖來制定作用範圍 1.以this充當鎖 是以物件作為鎖 鎖整個物件 2.以x.class 作為鎖 是以...