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

2021-08-14 10:03:52 字數 1024 閱讀 4049

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

[cpp]view plain

copy

handle

hlock;  

void

sub_func()  

void

data_process()    

出現這種情況的原因很多。很重要的乙個方面是因為軟體的各個模組是不同的人負責的。所以本質上說,我們根本無法確定別人使用了什麼樣的鎖。你也無權不讓別人使用某個鎖。所以,遇到這種情況,只好靠你自己了。巢狀鎖就是不錯的乙個解決辦法。

(1)巢狀鎖的資料結構

[cpp]view plain

copy

typedef

struct

_nestlock  

nestlock;  

nestlock* create_nest_lock(hanlde hlock)    

(2)申請巢狀鎖

[cpp]view plain

copy

void

get_nest_lock(nestlock* hnestlock)  

else

}  (3)釋放鎖

[cpp]view plain

copy

void

release_nest_lock(nestlock* hnestlock)  

}  文章總結:

(1)巢狀鎖與其說是新的鎖型別,不如說是統計鎖而已

(2)巢狀鎖和普通的鎖一樣,使用十分方便

(3)巢狀鎖也有缺點,它給我們的鎖檢測帶來了麻煩

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

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

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

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

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

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