linux多執行緒之巢狀鎖技術

2021-06-19 04:35:40 字數 1475 閱讀 7952

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

[cpp]view plain

copy

print?

handle hlock;  

void sub_func()  

void data_process()    

handle hlock;

void sub_func()

void data_process()

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

(1)巢狀鎖的資料結構

[cpp]view plain

copy

print?

typedef

struct _nestlock  

nestlock;  

nestlock* create_nest_lock(hanlde hlock)    

typedef struct _nestlock

nestlock;

nestlock* create_nest_lock(hanlde hlock)

(2)申請巢狀鎖

[cpp]view plain

copy

print?

void get_nest_lock(nestlock* hnestlock)  

else  

}  

void get_nest_lock(nestlock* hnestlock)

else

}

(3)釋放鎖

[cpp]view plain

copy

print?

void release_nest_lock(nestlock* hnestlock)  

}  

void release_nest_lock(nestlock* hnestlock)

}

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

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

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

linux多執行緒之自旋鎖

基本概念 何謂自旋鎖?它是為實現保護共享資源而提出一種鎖機制。其實,自旋鎖與互斥鎖比較類似,它們都是為了解決對某項資源的互斥使用。無論是互斥鎖,還是自旋鎖,在任何時刻,最多只能有乙個保持者,也就說,在任何時刻最多只能有乙個執行單元獲得鎖。但是兩者在排程機制上略有不同。對於互斥鎖,如果資源已經被占用,...

C 多執行緒 巢狀鎖

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

linux多執行緒程式設計之互斥鎖

執行緒的同步問題 乙個程序中的多個執行緒是共享同一段資源的,由於執行緒對資源的競爭引出了鎖。其中mutex是一種簡單的加鎖方法,這個互斥鎖只有兩種狀態,那就是上鎖和解 鎖,可以把互斥鎖看作是某種意義上的全域性變數。在某一時刻,只能有乙個執行緒取得這個互斥上的鎖,擁有上鎖狀態的執行緒可以對共享資源進行...