Linux入門 執行緒同步與互斥(四) 讀寫鎖

2021-07-30 11:46:57 字數 1004 閱讀 1327

讀寫鎖

在編寫多執行緒的時候,有一種情況是非常常見的。那就是,有些公共資料修改的機會比較少,相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這樣的**段加鎖,會極大地降低我們程式的效率。因此就需要一種方法,用來專門處理這種多讀少寫的情況——讀寫鎖。

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

但不能同時既有讀者又有寫者。

關於讀寫鎖的介面:

程式示例:(基於讀寫鎖的讀者/寫者問題)

執行結果:

程式**:

#include #include int buf = 0;

pthread_rwlock_t rwlock;

void *myread(void *arg)

else

}}void *mywrite(void *arg)

else

}}int main()

Linux 執行緒同步與互斥

多個執行緒併發的操作共享變數,會帶來 些問題。假設兩個執行緒讀寫相同變數時,執行緒a讀取變數然後給這個變數賦予乙個新的值,但寫操作需要兩個儲存週期。當執行緒b在這兩個寫週期讀取這個變數時,可能會得到不一致的值。為了避免這個問題,就需要互斥,同一時間只允許乙個執行緒訪問該變數。假設乙個場景,現有100...

Linux 多執行緒同步與互斥

在linux的多執行緒同步與互斥中,主要提供了訊號量的同步方式,以及互斥鎖和條件變數等訪問共享資源的方式。訊號量主要用於執行緒間的同步操作,兩個執行緒協同完成一件事情,在乙個執行緒完成乙個動作後,該需要通知另外乙個執行緒,進行相應的操作。1.1 需要包含的標頭檔案 include1.2 定義乙個全域...

執行緒同步與互斥

與多程序互動一樣,各個不同的執行緒之間也會存在資源的共享問題。為了解決多執行緒之間對資源訪問的同步和互斥問題,我們需要了解執行緒同步機制。第一種機制 互斥鎖 互斥鎖是一種簡單的加鎖方法,可以使單個執行緒進行對資源訪問的原子操作。互斥鎖的基本操作就是加鎖和解鎖。互斥鎖主要包含以下函式 1 初始化函式 ...