C# 中的死鎖和飢餓
當一個資源被一個執行緒鎖住,而另一個執行緒在同一時間也需要該資源時,便會發生死鎖。這個問題多發於多處理系統。
當兩個或多個執行緒等待另一個執行緒擁有的資源時,便會發生死鎖。下面是一個示例:
執行緒一 | 執行緒二 |
---|---|
獲取鎖 P | 獲取鎖 Q |
請求鎖 Q | 請求鎖 P |
執行緒一無法獲取鎖 Q,因為它屬於執行緒二。同理,執行緒二也無法獲取鎖 P,因為它的原始所有者是執行緒一。
如果存在三個執行緒和三個公共鎖,則死鎖也可能形成一個三向死鎖。它同樣可以形成四向、五向以及其他死鎖。
飢餓是一種線上程程式中一個或多個可執行執行緒的永久阻塞。
廣告