标答是 B,解析就是说先 thread1 全部执行完,或者 thread2 先全部执行完
我的困惑:当 thread1 只执行了前两条汇编指令,然后时间片用完,切到 thread2,最后 x 的值不也是 2 么?
而且题目也说了是,所有可能的指令执行序列中
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 是最后一个指令,所以当且仅当一个线程的最后一个指令在另一个线程的第一个指令之前发生,当且仅当一个线程在另一个开始之前完成。 |
2
visitant 2018-12-08 12:51:54 +08:00 via iPhone 1
问题的关键在于自增的操作是在寄存器内完成的,而两个线程第一步的操作都会是从内存取 x 的值,在任何一个线程未完成时,内存中的值是不会变的,所以只有某一线程完成,另一线程才会取到 1,否则两个线程都是在 0 的基础上自增 1
|
3
nolo 2018-12-08 12:53:14 +08:00 1
当 thread1 只执行了前两条汇编指令,然后时间片用完,切到 thread2,最后 x 的值不也是 2 么?
----------------- thread1 执行两条指令后,此时变量 x 还是 0,R1 寄存器尚未写入到变量 x。即使切到 thread2,最后 x 的结果还是 1. |
4
kx5d62Jn1J9MjoXP 2018-12-08 13:09:46 +08:00 1
想要结果为 2, 其中一个寄存器的读入值必须是 1, 也就是要另一个线程三步全部走完将 1 写回到 x 之后才能开始
|
6
rayhy 2018-12-08 14:05:59 +08:00 via Android
考浙大吗?我做了逃兵,楼主加油。
|
8
UxCZbWShjEsL 2018-12-08 16:55:34 +08:00 via iPhone
考完一年了,现在看到题目看下去的耐心都没了……
|
9
anonymous256 2018-12-08 17:22:02 +08:00 via Android
题目挺好的,治好了我多年的颈椎病。
|