灯下 登录
计算机科学 / SICP / 3.4.1 The Nature of Time in Concurrent Systems

Exercise 3.38 · 习题

Exercise 3.38: Suppose that Peter, Paul, and
Mary share a joint bank account that initially contains $100. Concurrently,
Peter deposits 10,Paulwithdraws10, Paul withdraws20, and Mary withdraws half the money in
the account, by executing the following commands:

Peter: (set! balance (+ balance 10))
Paul: (set! balance (- balance 20))
Mary: (set! balance (- balance
(/ balance 2)))

List all the different possible values for balance after these three
transactions have been completed, assuming that the banking system forces the
three processes to run sequentially in some order.

What are some other values that could be produced if the system allows the

processes to be interleaved? Draw timing diagrams like the one in Figure 3.29

to explain how these values can occur.

练习 3.38:假设 Peter、Paul 和 Mary 共享一个最初存有 100的联名银行账户。他们并发地执行以下命令:Peter存入100 的联名银行账户。他们并发地执行以下命令:Peter 存入10,Paul 取出 $20,Mary 取出账户中一半的钱:

Peter: (set! balance (+ balance 10))
Paul: (set! balance (- balance 20))
Mary: (set! balance (- balance
(/ balance 2)))

假设银行系统强制三个计算过程按某种顺序依次运行,列出这三笔交易完成后 balance 所有可能的值。

如果系统允许这些计算过程交错执行,还可能产生哪些其他值?请画出类似图 3.29 的时序图,说明这些值是如何产生的。

Racket #lang sicp
Peter: (set! balance (+ balance 10))
Paul: (set! balance (- balance 20))
Mary: (set! balance (- balance
 (/ balance 2)))