【发布时间】:2011-05-19 14:45:17
【问题描述】:
莫里斯·巴赫的《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 | | |
^
\ /
-----------------------
我正在尝试遍历逻辑,但我不知道为什么代码会导致 到一个损坏的双向链表,如图所示。有人可以解释发生了什么 在上下文切换期间会导致这个问题吗?
(p.s. 会被标记为双向链表,但没有标签创建权限)
【问题讨论】:
标签: operating-system linked-list context-switch