Answer till 3.42
This commit is contained in:
@@ -1,5 +1,78 @@
|
||||
(load "util.scm")
|
||||
|
||||
(display "\nex-3.38\n")
|
||||
(display "[answered]\n")
|
||||
|
||||
; Peter Paul Mary
|
||||
; 110 90 45
|
||||
|
||||
; Peter Mary Paul
|
||||
; 110 55 35
|
||||
|
||||
; Mary Peter Paul
|
||||
; 50 60 40
|
||||
|
||||
; Mary Paul Peter
|
||||
; 50 30 40
|
||||
|
||||
; Paul Mary Peter
|
||||
; 80 40 50
|
||||
|
||||
; Paul Peter Mary
|
||||
; 80 90 45
|
||||
|
||||
(display "\nex-3.39\n")
|
||||
(display "[answered]\n")
|
||||
|
||||
; (define x 10)
|
||||
; (define s (make-serializer))
|
||||
; (parallel-execute (lambda () (set! x ((s (lambda () (* x x))))))
|
||||
; (s (lambda () (set! x (+ x 1)))))
|
||||
|
||||
; 101: P1 sets x to 100 and then P2 increments x to 101.
|
||||
; 121: P2 increments x to 11 and then P1 sets x to x times x.
|
||||
; 100: P1 accesses x (twice), then P2 sets x to 11, then P1 sets x.
|
||||
; 11: P2 accesses x, then P1 sets x to 100, then P2 sets x.
|
||||
|
||||
; My friends on Scheme-Wiki agree with this solution so I feel good about this.
|
||||
|
||||
(display "\nex-3.40\n")
|
||||
(display "[answered]\n")
|
||||
|
||||
; (define x 10)
|
||||
; (parallel-execute (lambda () (set! x (* x x)))
|
||||
; (lambda () (set! x (* x x x))))
|
||||
|
||||
; 10 * 10 = 100
|
||||
; 10 * 10 * 10 = 1'000
|
||||
; 10 * 1000 = 10'000
|
||||
; 10 * 10 * 100 = 10'000
|
||||
; 10 * 100 * 100 = 100'000
|
||||
; 10^6 = 1'000'000
|
||||
|
||||
; (define x 10)
|
||||
; (define s (make-serializer))
|
||||
; (parallel-execute (s (lambda () (set! x (* x x))))
|
||||
; (s (lambda () (set! x (* x x x)))))
|
||||
|
||||
; 10^2 = 100 -> 100^3 = 1000000
|
||||
; 10^3 = 1000 -> 1000^2 = 1000000
|
||||
|
||||
(display "\nex-3.41\n")
|
||||
(display "[answered]\n")
|
||||
|
||||
; Ben's concern does not apply. Say, we have a withdraw and a balance check.
|
||||
; Depending on the order of execution the balance check would show the balance
|
||||
; before or after the withdraw. This behavior is expectected and would not be
|
||||
; migated by serializing balance.
|
||||
|
||||
(display "\nex-3.42\n")
|
||||
(display "[answered]\n")
|
||||
|
||||
; This should work without issues in all cases. I don't have a good mental
|
||||
; model of how the serializer works, yet.
|
||||
|
||||
(display "\nex-3.43\n")
|
||||
|
||||
(display "\nex-3.44\n")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user