文档章节

【SICP练习】115 练习3.41

NoMasp
 NoMasp
发布于 2015/09/08 21:48
字数 336
阅读 2
收藏 0

练习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并没有担心的必要。



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


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/44654313

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
HWiNFO32 3.41发布 初步支持Sandy Bridge

老牌硬件检测、识别工具HWiNFO32今天连续发布了3.40、3.41两个版本,增加了对大量新硬件的支持,特别是NVIDIA显卡芯片组以及 大量主板的传感器检测,甚至还初步支持Intel Sandy Bridge,而3...

红薯
2010/02/10
110
0
学以致用——Java源码——小学中低年级四则运算练习及考试程序(Computer-Assisted Instruction)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpdlzu80100/article/details/85234868 这个程序用来给小孩做数学练习应该还是不错的! 程序主要功能: 1. 可...

预见未来to50
2018/12/24
0
0
新手练习求质数

题目是输出 101~200之间的 质数 为什么我的运行结果是所有 101 到 199 包括之间的 a + 2 都输出了 比如115 不是质数。。。 这是一个视频教学的问题,答案用的for,我想试试用while和if行不行...

zhousd1129
2017/07/07
95
4
MyJSQLView 3.41 发布,MySQL 管理工具

MyJSQLView 3.41 增加了图形化的 SQL 查询构建器 (QueryBuilder) 插件。 MyJSQLView软件提供给用户另外一种针对MySQL数据库修改、浏览、删除等操作的选择。由于该软件基于java开发,因此可以...

oschina
2013/01/03
720
1
PS3 被黑 源码公开

PS3被黑源码公开 PS3发行大约四年以后,黑客们终于成功破解了其游戏控制,绕过了其版权保护系统。Sony采取禁令,禁止能破解SP3的电子狗的发售才几天,黑客们已经公开了名为“PSGroove”的被黑...

xyxzfj
2010/09/04
2.4K
2

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部