1
在Maurice Bach的Unix操作系統設計 中有一個例子,它提到了在創建期間由於 上下文切換而導致雙向鏈表被毀壞的可能性。 (他繼續說,在代碼的這些關鍵區域提高處理器級別可以防止這種情況發生,但我無法理解他試圖首先顯示問題的原因)他包含的示例代碼是 如下:雙向鏈表創建期間的上下文切換
struct queue {
} *bp, *bp1;
bp1 -> forp = bp -> forp;
bp1 -> backp = bp;
bp -> forp = bp1;
/* consider possible context switch here */
bp1 -> forp -> backp = bp1;
圖
他最初寫入所示:
| |
| bp1 |
-> | | -> | |
<- | bp | <- | |
然後,以示出最終狀態:
-> | | -> | | -> | |
<- | bp | <- | bp1 | | |
^
\ /
-----------------------
我試圖通過邏輯,但我不知道爲什麼代碼會導致 到一個破碎的雙向鏈表,如圖所示。有人可以解釋在上下文切換期間發生了什麼 導致此問題?
(PS會標記爲雙向鏈表,但沒有標籤創建權限)