Skip to content

Commit cdeb556

Browse files
committed
Add implementation of exercise 3-40
1 parent 772579e commit cdeb556

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

README.org

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
习题完成情况:
2626
- 章节一: 43/46
2727
- 章节二: 88/97
28-
- 章节三: 39/82
28+
- 章节三: 40/82
2929
- 章节四: TODO
3030
- 章节五: TODO
3131
* 运行

chapter3/exercise3-40.org

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#+LATEX_CLASS: ramsay-org-article
2+
#+LATEX_CLASS_OPTIONS: [oneside,A4paper,12pt]
3+
#+AUTHOR: Ramsay Leung
4+
5+
#+DATE: 2025-07-20 Sun 19:59
6+
所有可能的值:
7+
* P1先执行,P2再执行
8+
1000000: p1将 x 设置为 =100=, p2 将 x 设置为 =1000000=
9+
* P2 先执行, P1再执行
10+
1000000: p2 将 x 设置为 =1000=, p1 将 x 设置为 =1000000=
11+
* P1 在 P2 之间交错执行
12+
10000/100000: P1 将x 设置为 =100= 的动作出现在 p2 三次访问 x 的值之间,这三次访问是为了求值表达式 =(* x x x)=,所以它可能变成 =(* 10 100 100)= 或者 =(* 10 10 100)= 每个值的顺序还可能调换
13+
* P2 在 P1 之间交错执行
14+
10000: P2 将 x 设置为 =1000= 的动作出现在 p1 两次访问 x 的值之间,这两次访问是为了求值表达式 =(* x x)=, 所以会变成 =(* 10 1000)= 或者 =(*1000 10)=
15+
* P1 与 P2 同时执行
16+
100/10000: P1 和 P2 同时读取 x 值为 10, 同时计算 =(* x x)= 和 =(* x x x)=,如果 P1 后完成,那么 x 为100;如果 P2后完成,那么 x 为 10000
17+
* 结论
18+
总结而言,可能的值是100, 10000 与 1000000
19+
* 串行化
20+
如果改成串行化,无论是 p1 还是 p2 先执行,最后的结果也只会是 1000000

0 commit comments

Comments
 (0)