我在.net/C#中被問及這個問題:交易 - 如何避免死鎖?
如果我們有兩個線程T1和T2。 T1 獲取obj1上的鎖定,然後執行 某些處理並獲取 obj2上的鎖定。 T2獲得對obj2的鎖定並且 然後進行一些處理並獲取 對obj1的鎖定。所以,我們可以有一個 死鎖。我們在多線程中使用的常見技術 是什麼,以避免 這種情況?
我回答說T1和T2應該有一定的溝通機制,我們應該這樣編碼,使得T2只有在T1發出信號後纔開始工作。面試官問我是否知道交易以及如何使用它來解決這種僵局。 我在winforms的UI方面有一定的多線程經驗。但是,我從來沒有使用過交易。有人可以告訴我更多關於此的信息,或者將我指向url/book,
@Ash我得到了以相同的順序獲取鎖定點。但是,那麼關於交易的是什麼呢? – Sandbox 2009-09-19 10:32:17
@Sandbox,對我來說,他們看起來像是在談論一個「事務」,一般意義上說是確保一系列不同的操作是作爲一個(即原子)執行的。在數據庫中,這是通過Begin Transaction關鍵字在.net中實現的,它通過(通常)使用lock語句來實現。我在答覆中添加了Joe Duffy強烈推薦的書。 – Ash 2009-09-19 10:56:58