《计算机程序的构造与解释》(十六)
来源:互联网 发布:2012欧洲杯决赛数据 编辑:程序博客网 时间:2024/06/08 06:33
程序的并发:
没有副作用的函数,其值只依赖于输入参数,也就是它内部的表达式的值,总是相同的。但是对于有赋值操作的函数,也即有了副作用,函数内某些表达式的值,不确定了,依赖于求值的时刻,这就引入了时间因素。比如你有个银行账户,你每次从中取钱,那么你账户的余额每次都会不同。这是因为这个取款(withdraw)函数包含了修改“账户”变量,并且保持这个变量的值直到再次调用取款函数修改它。如果只有你一个人进行取款,或者每次只允许一次取款操作,那么都没有问题,但是如果这是个公共账户,就可能有多个人同时取款。这时,取款的操作结果可能就不是预期的那样了。因为withdraw里,必须先获取账户余额,然后减去输入参数,也即取走的款,然后将此值再赋值给账户函数,如果多个withdraw同时执行,上述的取款——修改——赋值操作的顺序将不确定,结果也即不确定了。A获取到的账户余额是100,此时B也正好获取账户,那么也是100;A在操作结束赋值后,假设为90,然后B也操作结束再次赋值假设为80。结果就是A、B两人进行取款操作,但是账户的效果就像是只有B取款了,A白白多得了些钱。
多个进程共享某个状态变量的情形下,保证并发程序的正确行为,必须对程序的并发执行增加限制。其中一个限制是:不允许修改任意共享状态变量的操作同时发生。也就是上例中,不允许A、B两个进程同时执行withdraw函数。
通过串行化的方式,来限制某些进程的执行顺序。每个过程可以分成多个步骤,这些不同步骤有的可能涉及共享状态的获取和改变,这些要是限制的;某些不涉及共享状态变量,是可以并行执行的。串行化就是创建一些过程集合,每个集合中的过程在同一时刻将那些涉及共享状态访问的步骤
- 《计算机程序的构造与解释》(十六)
- 计算机程序的构造与解释(SICP)
- 计算机程序的解释与构造1
- 计算机程序的构造与解释
- 《计算机程序的构造与解释》(一)
- 《计算机程序的构造与解释》(二)
- 《计算机程序的构造与解释》(三)
- 《计算机程序的构造与解释》(四)
- 《计算机程序的构造与解释》(五)
- 《计算机程序的构造与解释》(六)
- 《计算机程序的构造与解释》(七)
- 《计算机程序的构造与解释》(八)
- 《计算机程序的构造与解释》(九)
- 《计算机程序的构造与解释》(十)
- 《计算机程序的构造与解释》(十一)
- 《计算机程序的构造与解释》(十二)
- 《计算机程序的构造与解释》(十三)
- 《计算机程序的构造与解释》(十四)
- Greedy division
- windows 如何查看端口占用情况?
- Prime Path(广搜)
- Windows Internals 第六版 译文1
- 【开发工具】Ubuntu12.04 LTS 下SVN服务器安装
- 《计算机程序的构造与解释》(十六)
- 基于json数据格式实现的简单数据库——jsonDB
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能使得每个数至少出现一次。
- Summer-ACM-Trainning 第0周-热身中。。。
- DFS-BFS搜索专题【经典训练题】【有时间一个个做下来】
- mysql性能监控指标
- Nutch之GoogleSuggest前缀匹配
- 编译错误之error C3861: “getline”: 找不到标识符的问题
- crm快速开发之OrganizationService