huangzworks / SICP-answers

我的 SICP 解题集

Home Page:http://sicp.readthedocs.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于ex-3.42的问题

opened this issue · comments

我以为这样的修改是安全的。在并发性方面也没有什么显著变化。

我对解释中的这句话不太认同“因为运行中的串行化进程是不能被其他过程所干扰的”。我觉得并行应该是发生在不同的进程中,比如进程一在运行 (protected-withdraw 10)时,进程二想要并发的运行 (protected-withdraw 20),但是它发现它所要调运的过程protected-withdraw正在进程一中运行者,因此它等待进程一运行protected-withdraw结束,再开始运行。我的理由是p211小节中第一段的这句话“如果某个集合里有过程正在进行,而‘另一进程’企图执行这个集合里的‘任何’过程时,它就必须等待到前一过程的执行结束”。我觉得里面有这样的意思,不同的进程是可以调用同一个过程的,但显然由于(串行化的)同一个过程是在同一个集合下的,因此不同进程间需要等待。

我也不是很确定,貌似Ben老是提出一些不靠谱的建议~~~~~美国人怎么知道Ben就是笨啊?这个我也没想明白~~

刚刚做了ex3.45,发现确实有问题,但是这个问题如果只针对deposit和withdraw操作,那么是安全的,但如果涉及另外一个过程,该过程包装了deposit或withdraw的话就不能再被deposit和withdraw的同一个串行化组串行化,否则如ex3.45中那样产生死锁。但是貌似这里的protected是局部变量,没办法访问到,呵呵