博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SICP练习】115 练习3.41
阅读量:5105 次
发布时间:2019-06-13

本文共 1523 字,大约阅读时间需要 5 分钟。

练习3-41

原文

Exercise 3.41. Ben Bitdiddle worries that it would be better to implement the bank account as follows (where the commented line has been changed):

(define (make-account balance)    (define (withdraw amount)       (if (>= balance amount)               (begin (set! balance (- balance amount))               balance)               "Insufficient funds"))   (define (deposit amount)        (set! balance (+ balance amount))      balance)       ;; continued on next page       (let ((protected (make-serializer)))           (define (dispatch m)                 (cond ((eq? m 'withdraw) (protected withdraw))                                                  ((eq? m 'deposit) (protected deposit))                                                ((eq? m 'balance) ((protected (lambda () balance)))) ; serialized                   (else (error "Unknown request -- MAKE-ACCOUNT" m))))      dispatch))

because allowing unserialized access to the bank balance can result in anomalous behavior. Do you agree?

Is there any scenario that demonstrates Ben’s concern?

分析

假设有((protected withdraw) 100)和((protected deposit) 50)两个进程分别和balance并行执行。则会有4种可能的执行顺序。

withdraw - > balance 操作时,首先将余额设置为0,然后返回balance得到0。
balance - > withdraw操作时,首先balance会得到100,然后执行withdraw操作得到0。
deposit - > balance操作时,首先将余额设置为150,然后返回balance得到150。
balance - > deposit操作时,首先balance会得到100,然后deposit操作得到150。
由此可见Ben并没有担心的必要。



感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:


版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

转载于:https://www.cnblogs.com/NoMasp/p/4786086.html

你可能感兴趣的文章
文本相关属性
查看>>
导出文件的功能
查看>>
【bzoj4260】 Codechef REBXOR trie树
查看>>
raw_input() 与 input()
查看>>
Linux 上SSH 服务的配置和管理
查看>>
Java 多线程编程学习笔记
查看>>
计算机网络体系结构作业题整理-第三章答案
查看>>
执行新程序以及环境变量
查看>>
九度OJ 1030:毕业bg (01背包、DP)
查看>>
[Trouble Shooting - Python] TypeError: 'builtin_function_or_method' object is not subscriptable
查看>>
IT思想类智力题
查看>>
auto_ptr解析
查看>>
C语言二维数组作为函数的参数
查看>>
MongoDB与传统的关系型数据库的不同
查看>>
Programming Collective Intelligence
查看>>
nginx学习 - ip_hash的hash算法
查看>>
[SDOI2009][BZOJ1876] SuperGCD|高精度|更相减损术
查看>>
import同目录的py文件 :ModuleNotFoundError: No module named 'pdf'
查看>>
SQL优化(转)
查看>>
WPF textbox 鼠标滚动更新日期,text文本值更改
查看>>