文档章节

【SICP练习】116 练习3.42

NoMasp
 NoMasp
发布于 2015/09/08 21:49
字数 430
阅读 7
收藏 0

练习3-42

原文

Exercise 3.42. Ben Bitdiddle suggests that it’s a waste of time to create a new serialized procedure in response to every withdraw and deposit message. He says that make-account could be changed so that the calls to protected are done outside the dispatch procedure. That is, an account would return the same serialized procedure (which was created at the same time as the account) each time it is asked for a withdrawal procedure.

(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) (let ((protected (make-serializer))) (let ((protected-withdraw (protected withdraw)) (protected-deposit (protected deposit))) (define (dispatch m) (cond ((eq? m 'withdraw) protected-withdraw) ((eq? m 'deposit) protected-deposit) ((eq? m 'balance) balance) (else (error "Unknown request -- MAKE-ACCOUNT" m)))) dispatch)))

Is this a safe change to make? In particular, is there any difference in what concurrency is allowed by these two versions of make-account ?

分析

对于Ben的make-account函数而言,如果有以下5种操作:

(protected-deposit 10)
(protected-deposit 20)
(protected-deposit 40)
(protected-deposit 80)
(protected-deposit 160)

由于它们都会调用同一个protected-deposit串行化对象来调用请求,这意味着在处理第一个操作时,其他4个操作也即开始并发地运行,那么除了第一个操作之外,其余操作均会出错。这是因为运行中的串行化进程是不能被其他的过程所干扰的。

相比之下,原版的make-account函数则会在求值多种操作时,将所有的表达式都放进串行化组protected中,这样它们就可以并发的执行而不会被彼此所干扰。



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


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


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

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

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
第2章 方法的练习及注意事项

1.1 方法的练习 1.1.1 方法练习之获取两个数据中的较大 1.1.2 案例代码四 1.1.3 方法练习之比较两个数据是否相等1.1.4 案例代码五 1.1.5 方法练习之获取三个数据中的较大值1.1.6 案例代码六 ...

我是小谷粒
2018/03/09
0
0
eUML2真急人!!!

今晚弄了几个小时,这个插件总装不成功!按照网上的link方法装的,也不行~ 我的eclipse是3.42版本的,应该是最新的了,真郁闷! 各位有谁装成功的啊??教教小弟~

一叶知秋~风
2009/11/15
951
1
【书坊11月赠书福利——第二期】《“笨办法”学Python》 (第3版)

赠书活动停留了一个月,今天开始正常进行,继续每周都给大家送出最新、最好、最实用的技术书。 本周赠品 本周,微信君给大家推荐@人民邮电出版社-信息技术分社 刚刚上架的新书《“笨办法”学...

生气的散人
2014/11/18
295
0
拉勾网北京Java职位信息采集与简单薪酬统计

上周为了练习写Java程序,编了个采集拉勾网职位信息的小软件。采集了北京的java相关职位(3月8日之前),并把职位信息汇总成表,输出到一个网页。 来源地址: http://www.lagou.com/jobs/li...

NealFeng
2014/03/11
373
0
spring单元测试启动报错

这是我自己练习的一个项目,我看了日志,以为是配置文件路径不对,可是换了几种方法试了也不行。包括百度的方法! 代码如下: 报错信息如下: 警告: Exception encountered during context ...

酸奶瓶盖儿
2017/05/08
843
4

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
869
11
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
15
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部