巢狀鎖這個概念,主要是為了根據程式設計中的一種情形引申出來的。什麼情況呢,我們可以具體說明一下。假設你在處理乙個公共函式的時候,因為中間涉及公共資料,所以你加了乙個鎖。但是,有一點比較悲哀。這個公共函式自身也加了乙個鎖,而且和你加的鎖是一樣的。所以,除非你的使用的是訊號量,要不然你的程式一輩子也獲取不了這個鎖。
[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是一種簡單的加鎖方法,這個互斥鎖只有兩種狀態,那就是上鎖和解 鎖,可以把互斥鎖看作是某種意義上的全域性變數。在某一時刻,只能有乙個執行緒取得這個互斥上的鎖,擁有上鎖狀態的執行緒可以對共享資源進行...