死鎖(一) 這是乙個「雞生蛋,蛋生雞」的關係

2022-09-13 05:48:12 字數 1694 閱讀 1557

我在查詢維基百科的時候,他給了這麼句話:「

any deadlock situation can be compared to the classic

"chicken

or egg

" problem.

」。於是,這個曾經困擾我很多天的經典的案例就在死鎖**現了。

1.什麼是死鎖?

這是乙個老生常談的問題。

集合中的每乙個程序都在等待只能由本集合中的其他程序才能引發的事件,那麼該組程序是死鎖的。

之a前聽師哥講的時候:a在501機房,手裡拿著511的鑰匙;b在511機房,手裡拿著501的鑰匙;當a想訪問b,b想訪問a的時候,就產生了死鎖。

2. 產生死鎖的四個必備條件

雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個

必要條件

。1)互斥條件:

指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

2)請求和保持條件:

指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。

3)不剝奪條件:

指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4

)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

在師哥寫的

高併發update的

死鎖產生原因

:。感覺理解了好久,大體是這個意思:

我理解的大體意思是這樣子的:

首先資料庫是自帶鎖的,當事務進行查詢的時候,如果沒有加上聚集索引神馬的,是把所有的資料都加上u型鎖,乙個乙個去驗證,如果不是自己資料,那麼便釋放資源,如果是自己要的那條資料,u型鎖則變成x型鎖。

現在a事務執行兩條更新語句,第二條事務執行一條更新語句,為了模擬當時一級考試出現的高併發的現象, 執行a事務的時候waitfor  delay '00:00:05'這樣子a執行完第一條語句之後,並沒有立馬執行下一句話,而是處於等待狀態。所以執行b的事務,當b執行到a佔據的資源的時候,也處於等待狀態,當b找到自己的資源的時候,同樣加上改為x鎖,當a事務釋放資源繼續執行第二條語句,同樣是站著乙個資源等待乙個死鎖。這樣死鎖就出現了。

1. 聚集索引能夠解決死鎖?

其實我上面這句話本身是很有問題的,首先,聚集索引不能解決死鎖,只能是降低死鎖發生的概率。後來我在反覆看師哥一篇關於索引部落格的時候發現了一句:聚集索引就是把很大範圍內迅速縮小範圍來查詢。我琢磨了半天,才了解:

首先資料庫是自帶鎖的,當事務進行查詢的時候,如果沒有加上聚集索引神馬的,是把所有的資料都加上u型鎖,乙個乙個去驗證,如果不是自己資料,那麼便釋放資源,如果是自己要的那條資料,u型鎖則變成x型鎖。

通過聚集索引來縮小範圍,這樣子執行事務a的時候並不用把所有的資料都上u鎖,也就說a事務,b事務搜尋的範圍不一樣,這樣子,產生死鎖的概率就會大大降低。

死鎖(一) 這是乙個「雞生蛋,蛋生雞」的關係

我在查詢維基百科的時候,他給了這麼句話 any deadlock situation can be compared to the classic chicken or egg problem.於是,這個曾經困擾我很多天的經典的案例就在死鎖中出現了。1.什麼是死鎖?這是乙個老生常談的問題。集合中的每...

乙個acm小辣雞

1006 四捨五入加0.5 woc?1008 三目運算子a b?a b 1012 0f 無小數部分 浮點數不可強制轉化為整數 1013 最大公約數 int yin int m,int n 1014 scanf s a 遇到空格 回車和製表符 截斷0.0 gets回車截斷 此題可用getchar 10...

乙個辣雞的OI生涯

2015年下半年知道了oi 2016年1月初步學習了語法,但是還在糾結是不是要選擇化學 2016年大概4月的時候最終決定放棄直公升去雅禮 中考noip2016 嘛考得不算好,不過也超過了一等獎線不少分。對於當時的我也知足了。在聯賽之前的集訓中見識到了高二的大爺們。感覺乙個個好高冷啊看我們像看智障一樣...