首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建双向链表期间的上下文切换

创建双向链表期间的上下文切换
EN

Stack Overflow用户
提问于 2011-05-19 22:45:18
回答 1查看 359关注 0票数 1

在莫里斯·巴赫的《Unix操作系统的设计》中有一个例子,它提到了一个双重链表是如何可能在创建过程中由于上下文切换而被销毁的。(他继续说,这是通过在代码的关键区域提高处理器级别来防止的,但我很难理解他试图首先显示问题的推理)他包含的示例代码如下:

代码语言:javascript
运行
复制
struct queue {

} *bp, *bp1;
bp1 -> forp = bp -> forp;
bp1 -> backp = bp;
bp -> forp = bp1;
/* consider possible context switch here */
bp1 -> forp -> backp = bp1;

他所写的图表最初显示了:

代码语言:javascript
运行
复制
              |     |
              | bp1 |

->    |    |    ->         |    |
<-    | bp |    <-         |    |

然后,显示最终状态:

代码语言:javascript
运行
复制
->  |    |  ->  |     |   -> |    |
<-  | bp |  <-  | bp1 |      |    |
       ^
        \                       /
         ----------------------- 

我正在尝试遍历逻辑,但我不知道为什么代码会导致如下所示的断开的双向链表。有人能解释一下在上下文切换过程中发生了什么导致这个问题吗?

(附注:将标记为双向链接列表,但没有创建标签的权限)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 08:30:57

我的错误是没有仔细阅读-- Maurice在图表前的页面中说,如果另一个进程“在原始进程再次运行之前操纵链表上的指针”,上下文切换将如何破坏代码。我很困惑,因为我试图仅从图表和代码中获得足够的信息,这两个都没有提到切换到的进程将在内存中处理相同的数据结构的事实(尽管有上下文切换...仍然不是一个100%清晰/有动力的例子)。无论哪种方式,当我从一个页面读到下一个页面时,显然我自己的内核有一些数据损坏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6060456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档