V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wisej
V2EX  ›  操作系统

一道考研 408 的真题

  •  
  •   wisej · 2018-12-08 12:33:27 +08:00 · 2925 次点击
    这是一个创建于 1937 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第 25 题

    标答是 B,解析就是说先 thread1 全部执行完,或者 thread2 先全部执行完

    我的困惑:当 thread1 只执行了前两条汇编指令,然后时间片用完,切到 thread2,最后 x 的值不也是 2 么?

    而且题目也说了是,所有可能的指令执行序列中

    第 1 条附言  ·  2018-12-08 13:37:39 +08:00
    -------------------------------------------------------

    初值为 0,自己没审好题
    9 条回复    2018-12-08 17:22:02 +08:00
    geelaw
        1
    geelaw  
       2018-12-08 12:46:24 +08:00   ❤️ 1
    题主想象的序列结果是 1。

    结果是 2,当且仅当后出现的 move from x 能够读到 1,当且仅当那个时候 x 已经是 1,当且仅当那之前有一个 move to x,又因为两个线程都是 move from x 是第一个指令,move to x 是最后一个指令,所以当且仅当一个线程的最后一个指令在另一个线程的第一个指令之前发生,当且仅当一个线程在另一个开始之前完成。
    visitant
        2
    visitant  
       2018-12-08 12:51:54 +08:00 via iPhone   ❤️ 1
    问题的关键在于自增的操作是在寄存器内完成的,而两个线程第一步的操作都会是从内存取 x 的值,在任何一个线程未完成时,内存中的值是不会变的,所以只有某一线程完成,另一线程才会取到 1,否则两个线程都是在 0 的基础上自增 1
    nolo
        3
    nolo  
       2018-12-08 12:53:14 +08:00   ❤️ 1
    当 thread1 只执行了前两条汇编指令,然后时间片用完,切到 thread2,最后 x 的值不也是 2 么?
    -----------------
    thread1 执行两条指令后,此时变量 x 还是 0,R1 寄存器尚未写入到变量 x。即使切到 thread2,最后 x 的结果还是 1.
    ssynhtn
        4
    ssynhtn  
       2018-12-08 13:09:46 +08:00   ❤️ 1
    想要结果为 2, 其中一个寄存器的读入值必须是 1, 也就是要另一个线程三步全部走完将 1 写回到 x 之后才能开始
    wisej
        5
    wisej  
    OP
       2018-12-08 13:36:57 +08:00
    @geelaw
    @visitant
    @nolo
    @ssynhtn

    谢谢大家!我自己没审清题,我想着 x 初值是 1...
    rayhy
        6
    rayhy  
       2018-12-08 14:05:59 +08:00 via Android
    考浙大吗?我做了逃兵,楼主加油。
    wisej
        7
    wisej  
    OP
       2018-12-08 15:59:39 +08:00
    @rayhy 不是呀 你也加油
    UxCZbWShjEsL
        8
    UxCZbWShjEsL  
       2018-12-08 16:55:34 +08:00 via iPhone
    考完一年了,现在看到题目看下去的耐心都没了……
    anonymous256
        9
    anonymous256  
       2018-12-08 17:22:02 +08:00 via Android
    题目挺好的,治好了我多年的颈椎病。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3035 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:48 · PVG 20:48 · LAX 05:48 · JFK 08:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.