多執行緒 十一 讀寫鎖SRWLock

2021-06-26 21:40:42 字數 1925 閱讀 8223

參考自

本篇將介紹一種新方法——讀寫鎖srwlock

來解決這一問題。

讀寫鎖在對資源進行保護的同時,還能區分想要讀取資源值的執行緒(讀取者執行緒)和想要更新資源的執行緒(寫入者執行緒)。對於讀取者執行緒,讀寫鎖會允許他們併發的執行。當有寫入者執行緒在占有資源時,讀寫鎖會讓其它寫入者執行緒和讀取者執行緒等待。因此用讀寫鎖來解決讀者寫者問題會使**非常清晰和簡潔。

下面就來看看如何使用讀寫鎖,要注意編譯讀寫鎖程式需要vs2008,執行讀寫鎖程式要在vista或windows server2008系統(比這兩個更高階的系統也可以)。讀寫鎖的主要函式就五個,分為初始化函式,寫入者執行緒申請和釋放函式,讀取者執行緒申請和釋放函式,以下是詳細的函式使用說明:

第乙個initializesrwlock

函式功能:初始化讀寫鎖

函式原型:

void

initializesrwlock

(psrwlock

srwlock);

函式說明:初始化(沒有刪除或銷毀

srwlock

的函式,系統會自動清理)

第二個acquiresrwlockexclusive

函式功能:寫入者執行緒申請寫資源。

函式原型:

void

acquiresrwlockexclusive

(psrwlock

srwlock);

第三個releasesrwlockexclusive

函式功能:寫入者執行緒寫資源完畢,釋放對資源的占用。

函式原型:

void

releasesrwlockexclusive

(psrwlock

srwlock);

第四個acquiresrwlockshared

函式功能:讀取者執行緒申請讀資源。

函式原型:

void

acquiresrwlockshared

(psrwlock

srwlock);

第五個releasesrwlockshared

函式功能:讀取者執行緒結束讀取資源,釋放對資源的占用。

函式原型:

void

releasesrwlockshared

(psrwlock

srwlock);

注意乙個執行緒僅能鎖定資源一次,不能多次鎖定資源。

#include "stdafx.h"

#include #include #include //設定控制台輸出顏色 ;

bool setconsolecolor(word wattributes)

const int reader_num = 5; //讀者個數

//關鍵段和事件

critical_section g_cs;

srwlock g_srwlock;

//讀者執行緒輸出函式(變參函式的實現)

void readerprintf(char *pszformat,...)

//讀者執行緒函式

unsigned int __stdcall readerthreadfun(pvoid pm)

//寫者執行緒輸出函式

void writerprintf(char *pszstr)

//寫者執行緒函式

最後總結一下讀寫鎖srwlock

1.讀寫鎖宣告後要初始化,但不用銷毀,系統會自動清理讀寫鎖。

2.讀取者和寫入者分別呼叫不同的申請函式和釋放函式。

多執行緒之SRWLOCK

下面就來看看如何使用讀寫鎖,要注意編譯讀寫鎖程式需要vs2008,執行讀寫鎖程式要在vista或windows server2008系統 比這兩個更高階的系統也可以 讀寫鎖的主要函式就五個,分為初始化函式,寫入者執行緒申請和釋放函式,讀取者執行緒申請和釋放函式,以下是詳細的函式使用說明 第乙個ini...

多執行緒學習 讀寫鎖

讀寫鎖 reentrantreadwritelock 具有互斥排他效果,即同一時間只有乙個執行緒在執行鎖後面的任務,這種效率比較搞。讀鎖也稱為共享鎖,寫鎖也稱為排他鎖。多個讀鎖之間不互斥,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥。在沒有執行緒thread進行寫入操作時,進行讀取操作的多個執行緒都可以獲取讀鎖,...

多執行緒之讀寫鎖

之前沒真正使用讀寫鎖,看到別人對讀寫鎖的解釋總感覺一頭霧水。今天親自敲 實驗之後,才明了,原來如此。網上沒有一篇文章是能描述出自己理解的樣子,所以將自己的思路記下來。先提出疑問,邊自答邊找思路,有了思路,再回頭去執行一下 就清晰明了了。如果你急著想要一句話概括讀寫鎖,那我會告訴你 讀鎖是加在讀方法裡...