Maurice Bach 的 The Design of the Unix Operating System 中有一个例子,它提到了双向链表在创建过程中如何由于上下文切换而被破坏。(他接着说,通过在代码的这些关键区域提高处理器级别可以防止这种情况发生,但我无法理解他试图首先显示问题的推理)他包含的示例代码如下如下:
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 会被标记为双向链表,但没有标签创建权限)