linux C鎖的概念

2021-10-09 12:10:39 字數 920 閱讀 6396

臨界區指的是乙個訪問共用資源(例如:共用裝置或是共用儲存器)的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性

只有有限的人能占有,關鍵結構、資料、區域只有特定的物件能訪問,為了解決併發操作的順序不確定性。

對於讀者和寫者來說。只要有一方獲取了鎖,另一方則不能繼續獲取,進而執行臨界區**

原子操作指的是在執行過程中不會被別的**路徑所中斷的操作。

因為這個資源非常重要,所以一直在遠大轉圈等這個資源,別的什麼事也不幹。

保障了不同cpu對一段關鍵**同時只能有一方占用,而且這個資源非常重要,所以一定要等到這個資源,不會被排程和中斷,一直等,常常用在中斷裡面。

輪詢忙等待,在單核cpu下不起作用:被自旋鎖保護的臨界區**執行時不能進行掛起狀態。會造成死鎖

讀寫鎖適合於對資料結構的讀次數比寫次數多得多的情況.因為,讀模式鎖定時可以共享,以寫 模式鎖住時意味著獨佔,所以讀寫鎖又叫共享-獨佔鎖.

與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直 到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。

訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作(大家都在semtake的時候,就阻塞在 **)。而互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法訪問,直到這個執行緒unlock,其他的執行緒才開始可以利用這 個資源。比如對全域性變數的訪問,有時要加鎖,操作完了,在解鎖。有的時候鎖和訊號量會同時使用的」

也就是說,訊號量不一定是鎖定某乙個資源,而是流程上的概念,比如:有a,b兩個執行緒,b執行緒要等a執行緒完成某一任務以後再進行自己下面的步驟,這個任務 並不一定是鎖定某一資源,還可以是進行一些計算或者資料處理之類。而執行緒互斥量則是「鎖住某一資源」的概念,在鎖定期間內,其他執行緒無法對被保護的資料進 行操作。在有些情況下兩者可以互換。

Linux C 檔案鎖的操作

共享鎖,如果a程序對檔案的某區域加了讀鎖,b程序也可以在此區域加讀鎖,但是不能對此區域加寫鎖。獨佔鎖,如果a程序對檔案的某個區域加了寫鎖,b程序就不能對此區域加寫鎖,也不能對此區域加讀鎖。當多個程序同時對乙個檔案進行讀寫操作時,為確保檔案的完整和一致性,這幾個程序要加鎖同步。當程序開始讀取檔案的某個...

linux c 多執行緒互斥鎖

beers.c include include include include include include int beers 2000000 建立互斥鎖,互斥鎖對所有可能發生衝突的執行緒可見,是乙個全域性變數.pthread mutex initializer實際上是乙個巨集,當編譯器看到它,...

Oracler的鎖概念

oracle鎖定機制大部分情況下是自動的。你不需要關心如何鎖定想要更改的物件的細節,oracle在後台自動維護它們。鎖有兩種級別 1.行級鎖,2.表級鎖。鎖定的優點 一致性 一次只允許乙個使用者修改資料,從而提供統一的資料。完整性 向所有使用者提供正確的資料。如果乙個使用者進行了更改並儲存,那麼所做...