[color=red]什麼是資料庫死鎖
每個使用關係型資料庫的程式都可能遇到資料死鎖的情況。理解什麼是死鎖之前先要了解鎖定的概念:如果需要「修改」一條資料,首先資料庫管理系統會在上面加鎖,以保證在同一時間只有乙個事務能進行修改操作。鎖定(locking)發生在當乙個事務獲得對某一資源的「鎖」時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證資料一致性。
多數情況下,可以認為如果乙個資源被鎖定,它總會在以後某個時間被釋放。而死鎖發生在當多個程序訪問同一資料庫時,其中每個程序擁有的鎖都是其他程序所需的,由此造成每個程序都無法繼續下去。簡單的說,程序a等待程序b釋放他的資源,b又等待a釋放他的資源,這樣就互相等待就形成死鎖。
導致資料庫死鎖的原因
一般情況只發生鎖超時,就是乙個程序需要訪問資料庫表或者欄位的時候,另外乙個程式正在執行帶鎖的訪問(比如修改資料),那麼這個程序就會等待,當等了很久鎖還沒有解除的話就會鎖超時,報告乙個系統錯誤,拒絕執行相應的sql操作。
發生死鎖的情況比較少,比如乙個程序需要訪問兩個資源(資料庫表或者字段),當獲取乙個資源的時候程序就對它執行鎖定,然後等待下乙個資源空閒,這時候如果另外乙個程序也需要兩個資源,而已經獲得並鎖定了第二個資源,那麼就會死鎖,因為當前程序鎖定第乙個資源等待第二個資源,而另外乙個程序鎖定了第二個資源等待第乙個資源,兩個程序都永遠得不到滿足。[/color]
Linux 什麼是死鎖以及如何避免死鎖
介紹死鎖之前,先來說一下作業系統中的資源分類 按照使用次數分類 1 可重用性資源 每乙個可重用資源中的單元只能分配給乙個程序使用,不允許多個執行緒共享。程序使用資源順序 1 請求資源,如果請求失敗程序阻塞或迴圈等待 2 使用資源 3 釋放資源。系統中的可重用資源數目都是相對固定的程式執行時不能增加或...
什麼是死鎖?如何避免死鎖? 以及實現執行緒死鎖才程式
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...
什麼是死鎖(死鎖的理解)
多執行緒和鎖作為併發程式設計的兩個重要概念,在提公升了程式效能的同時,也帶來了一些編碼的複雜性。鎖的出現就是為了保證在多執行緒的時候操作一組資源資料的一致性,我們在給資源加上鎖之後,只有擁有了這個鎖的執行緒才能操作此資源,其餘的執行緒只能排隊。舉個例子 例如你去換衣間試衣服,你進去了把門鎖上,那麼在...