關於執行緒一些鎖的概念和擴充套件

2021-09-16 14:21:02 字數 1112 閱讀 2545

一.擴充套件

臨界區:指的是乙個訪問共用資源(例如:共用裝置或是共用儲存器)的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性。當有執行緒進入臨界區段時,其他執行緒或是程序必須等待(例如:bounded waiting 等待法),有一些同步的機制必須在臨界區段的進入點與離開點實現,以確保這些共用資源是被互斥獲得使用,例如:semaphore。只能被單一執行緒訪問的裝置,例如:印表機。

臨界資源:是一次僅允許乙個程序使用的共享資源。各程序採取互斥的方式,實現共享的資源稱作臨界資源。屬於臨界資源的硬體有,印表機,磁帶機等;軟體有訊息佇列,變數,陣列,緩衝區等。諸程序間採取互斥方式,實現對這種資源的共享。

訊號量(semaphore): 是一種更高階的同步機制,互斥鎖可以說是semaphore在僅取值0/1時的特例。訊號量可以有更多的取值空間,用來實現更加複雜的同步,而不單單是執行緒間互斥。

二.種類

1.自旋鎖:是用於多執行緒同步的一種鎖,執行緒反覆檢查鎖變數是否可用。由於執行緒在這一過程中保持執行,因此是一種忙等待。一旦獲取了自旋鎖,執行緒會一直保持該鎖,直至顯式釋放自旋鎖。 自旋鎖避免了程序上下文的排程開銷,因此對於執行緒只會阻塞很短時間的場合是有效的。

2.互斥鎖(mutex):  是一種用於多執行緒程式設計中,防止兩條執行緒同時對同一公共資源(比如全域性變數)進行讀寫的機制。該目的通過將**切片成乙個乙個的臨界區而達成。

3.讀寫鎖: 實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於自旋鎖而言,能提高併發性,因為在多處理器系統中,它允許同時有多個讀者來訪問共享資源,最大可能的讀者數為實際的邏輯cpu數。寫者是排他性的,乙個讀寫鎖同時只能有乙個寫者或多個讀者(與cpu數相關),但不能同時既有讀者又有寫者。

4.條件鎖:就是條件變數,當程序的某些資源要求不滿足時就進入休眠,也就是鎖住了。當資源被分配到了,條件鎖開啟,程序繼續執行。

5.遞迴鎖:是互斥鎖上的乙個變體。遞迴鎖允許單個執行緒在釋放鎖之前多次獲取鎖。其他執行緒仍然被阻塞,直到鎖的所有者釋放鎖的次數相同。遞迴的鎖在遞迴迭代中主要使用,但也可以在需要單獨獲取鎖的多個方法中使用。

6.分布鎖:分布式鎖在流程級別上提供互斥的訪問。與真正的互斥鎖不同,分布式鎖不會阻塞程序或阻止程序執行。它只是報告當鎖很忙時,讓流程決定如何進行。

鎖的一些概念

作業需要乙個目標之前分配目標,這樣在用目標是不用再等,可保證完成所需功能,這叫目標的分配。可用alcobj命令預先分配目標,用dlcobj解除分配 目標是根據要他們做什麼來分配的 讀或者修改 和他們是否可以共享。檔案和成員總是以 shrrd來分配。而資料用規定所狀態來分配鎖的級別。鎖狀態標誌使用的目...

鎖的一些概念

使用reentrantlock獲取鎖的時候會判斷當前執行緒是否為獲取鎖的執行緒,如果是則將同步的狀態 1 釋放鎖的時候則將狀態 1。只有將同步狀態的次數置為 0 的時候才會最終釋放鎖。使用reentrantreadwritelock,同時維護一對鎖 讀鎖和寫鎖。當寫執行緒訪問時則其他所有鎖都將阻塞,...

day1 關於執行緒的一些概念

關於執行緒的一些概念 首先,什麼是執行緒,執行緒是程式執行的最小單元,有時也稱之為輕量級程序。乙個標準的執行緒一般有執行緒id,指標,暫存器和堆疊組成。通常乙個程序由乙個到多個執行緒組成,各個執行緒之間會共享程式的記憶體空間,所謂記憶體空間也就是資料段 段 資料段和一些程序級資源等。其次,為什麼要使...