练习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柯于旺 原创文章,如需转载请联系本人。

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

【SICP练习】115 练习3.41相关推荐

  1. poj——3177Redundant Paths

    poj--3177Redundant Paths      洛谷-- P2860 [USACO06JAN]冗余路径Redundant Paths Time Limit: 1000MS   Memory ...

  2. python国产_Python勒索软件来袭,国产杀软集体失身

    近日,fortinet截获一种使用python语言编写的勒索软件,并将其命名为 "Fsociety Locker".之所以命名为"Fsociety Locker" ...

  3. zbb20190528 城市经纬度json

    [{"name": "北京市","log": "116.46","lat": "39.92 ...

  4. REVERSE-PRACTICE-BUUCTF-15

    REVERSE-PRACTICE-BUUCTF-15 [2019红帽杯]xx [ACTF新生赛2020]Universe_final_answer [WUSTCTF2020]level4 findKe ...

  5. matlab弗洛伊德算法,MATLAB弗洛伊德算法结果有疑惑,求大神解答

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 结果是92*92矩阵,出现不止一个a,还有第一个结果没表示,就是矩阵 程序如下: clear;clc; n=92;a=zeros(n); a(1,75)= ...

  6. 心电图心电轴怎么计算_心电图电轴计算方法

    心电图心电轴计算表 心 -20 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 ...

  7. 心电图心电轴怎么计算_心电图心电轴计算表

    -20 240° 00 ′ -119° 09 ′ -118° 15 ′ -117° 19 ′ -116° 21 ′ -115° 17 ′ -114° 11 ′ 113° 01 ′ -111° 47 ′ ...

  8. 数据可视化--实验4

    题目 0.数据来源:<鲜活的数据:数据可视化指南> 1."crimeRatesByState2005.csv"是2005年美国各州的犯罪率.请用散点图.气泡图绘制出谋杀 ...

  9. matlab作业1,matlab作业报告一

    解:clear,先清除内存中的所有变量 fun='abs(x)',将abs(x)作为字符串赋给fun,输出abs(x)(fun为char类型,占12个字符) x=-2,将-2赋值给x,输出-2 (x为 ...

  10. 请问如何使IE支持有swing的aaplet?

    http://java.sun.com/products/plugin/1.3/docs/html_converter.html 用htmlconverter1.3转换这个网页才能看到运行的结果 To ...

最新文章

  1. 机器学习的前沿发展与应用分享
  2. tnsname.ora文件配置详解
  3. formal method revision
  4. ECCV 2018 | Bi-box行人检测:‘行人遮挡’为几何?
  5. php 使用webservice_PHP中如何调用webservice的实例参考
  6. 【译】Tablix指南----通向报表服务的阶梯系列(四)
  7. .NET架构小技巧(6)——什么是好的架构
  8. Python3 爬虫实战 — 58同城武汉出租房【加密字体对抗】
  9. Latex slide中添加算法流程图
  10. 举个栗子!Tableau 技巧(109):用 LOD 计算产品销售周期
  11. 矢量网络分析仪VNA的校准之SOLT方法
  12. 截止9月10日苹果审核指南中文版
  13. 链表——24. 两两交换链表中的节点
  14. ubuntu下安装 julia-1.4.2
  15. 苹果电脑macos Monterey 12.6(21G115)dmg原版引导版镜像下载
  16. 小人数字时钟安卓版本APP
  17. 西安交通大学XJTU计算机作业题
  18. caffe中HDF5层及数据生成
  19. AES 解密报错:Given final block not properly padded. Such issues can arise if a bad key is used dur
  20. [Rx86OS-XIX] 应用程序和系统调用

热门文章

  1. ELK 架构之 Elasticsearch 和 Kibana 安装配置
  2. 【Windows】DOS的常用命令
  3. The most impressed error
  4. logrotate日志轮转配置文档
  5. Java中的异或(转)
  6. Bitmap Style Designer非官方说明
  7. 煤矿行业设备管理系统
  8. JMeter基础教程1:若隐若现的参数化
  9. ColorPic 一套簡單好用的顏色選擇器!
  10. OO CSS的个人理解