一、讀寫鎖
有些公共資料修改的機會很少,但其讀的機會很多。並且在讀的過程中會伴隨著查詢,給這種**加鎖會降低我們的程式效率。讀寫鎖可以解決這個問題。
讀寫鎖本質上是一種自旋鎖
讀者——寫者:同步與互斥
寫者——寫者:互斥
讀者——讀者:共享、沒關係
面試題:為什麼消費者與消費者之間是互斥而讀者與讀者之間是沒關係?
因為消費者會將資料拿走,而讀者只訪問不會將資料拿走
注意:寫獨佔,讀共享,寫鎖優先順序高
讀寫鎖的策略:讀者優先
寫者優先
初始化
讀寫鎖的屬性一般設定為空
銷毀加鎖和解鎖
6 int counter;//計數器
7 pthread_rwlock_t rwlock;//讀寫鎖
8 9 void* route_write(void *arg)
10 19 }
20 21 void* route_read(void *arg)
22 30 }
31 32 int main()
33 45 for(i = 3;i < 8;i++)//建立5個讀者執行緒
二、死鎖
死鎖是指多個執行緒因競爭資源而造成的僵局(互相等待)
1、產生死鎖的4個條件:
a、互斥:某資源只能被乙個程序使用,其他程序請求該資源時,只能等待,直到該資源被使用完畢
b、請求和保持條件:程式已經保持了至少乙個資源,但是又提出了新要求,而這個資源被其他程序占用,自己占用的資源卻保持不放
c、不可搶占條件:程序已獲得的資源沒有使用完,不能被搶占
d、迴圈等待條件:必然存在乙個迴圈鏈
2、處理死鎖的方法:
a、預防死鎖:破壞死鎖的四個必要條件中的任何乙個或多個
b、避免死鎖:和預防死鎖的區別是,在資源動態分配過程中,用某種方式防止系統進入不安全的狀態
c、檢測死鎖:執行時出現死鎖,能及時發現死鎖,把程式解脫
d、解除死鎖:發生死鎖後,解脫程序,通常撤銷程序,**資源,再分配給正處於阻塞狀態的程序
3、預防死鎖的方法:
a、破壞請求和保持條件
b、破壞不可搶占條件
c、破壞迴圈等待條件
4、避免死鎖的方法:
a、加鎖順序
b、加鎖時限
c、死鎖檢測
互斥鎖遞迴鎖及死鎖現象
from threading import lock,rlock lock 互斥鎖 效率高 rlock 遞迴 recursion 鎖 效率相對低 l lock l.acquire print 希望被鎖住的 l.release rl rlock 在同乙個執行緒中可以被acquire多次 rl.acqu...
鎖 互斥鎖,死鎖
當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制 執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀態變...
事務及併發控制(鎖,死鎖,恢復)
標籤 事務 sql併發控制 死鎖資料庫恢復 2016年04月01日 20 38 29 1540人閱讀收藏 舉報資料庫 2 目錄 1.事務 transaction 的定義 指訪問並可能更新資料庫中各種資料項的乙個程式執行單元 unit 包括 sql語句的集合,儲存過程體,高階語言的事件 2.事務的狀態...