多執行緒的那點兒事(之讀寫鎖)

2021-06-02 05:29:55 字數 1070 閱讀 1964

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

有,那就是讀寫鎖。

(1)首先,我們定義一下基本的資料結構。

typedef struct _rwlock

rwlock;

同時,為了判斷當前的鎖是處於讀狀態,還是寫狀態,我們要定義乙個列舉量,

typedef enum

;

(2)初始化資料結構

rwlock* create_read_write_lock(handle hread, handle hwrite)

(3)獲取讀鎖

void read_lock(rwlock* prwlock)

releasemutex(prwlock->hread);

}

(4)獲取寫鎖

void write_lock(rwlock* prwlock)

(5)釋放讀寫鎖

void read_write_unlock(rwlock* prwlock)

releasemutex(prwlock->hread);

}else

return;

}

(1)讀寫鎖的優勢只有在多讀少寫、**段執行時間長這兩個條件下才會效率達到最大化;

(2)任何公共資料的修改都必須在鎖裡面完成;

(3)讀寫鎖有自己的應用場所,選擇合適的應用環境十分重要;

(4)編寫讀寫鎖很容易出錯,朋友們應該多加練習;

(5)讀鎖和寫鎖一定要分開使用,否則達不到效果。

多執行緒的那點兒事(之讀寫鎖)

在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...

多執行緒的那點兒事(之讀寫鎖)

在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...

多執行緒的那點兒事(之巢狀鎖)

巢狀鎖這個概念,主要是為了根據程式設計中的一種情形引申出來的。什麼情況呢,我們可以具體說明一下。假設你在處理乙個公共函式的時候,因為中間涉及公共資料,所以你加了乙個鎖。但是,有一點比較悲哀。這個公共函式自身也加了乙個鎖,而且和你加的鎖是一樣的。所以,除非你的使用的是訊號量,要不然你的程式一輩子也獲取...