因为 ((s (lambda () (* x x))))
和 ((s (lambda () (set! x (+ x 1)))))
都是串行化操作,因此可以将它们看作是一个单独的执行单位 sa
和 sb
,并将题目给出的表达式转换成以下表示:
(parallel-execute (lambda () (set! x sa))
sb)
以上表达式可能的执行序列有以下这些( ?
符号表示执行过程被其他操作打断):
sb
–> (set! x sa)
(set! x ?)
–> sb
–> (set! x sa)
(set! x sa)
–> sb
这些执行序列会产生以下结果:
(set! x (+ 10 1))
=> x = 11
=> (set! x (* 11 11))
=> x = 121
(set! x ?)
=> (set! x (+ 10 1))
=> x = 11
=> (set! x (* 11 11))
=> x = 121
(set! x (* 10 10))
=> x = 100
=> (set! x (+ 100 1))
=> x = 101