Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88839
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:38
文章分类
文章存档

2009年(12)

2008年(19)

我的朋友

分类:

2008-10-06 22:34:17

可重入,这个概念很多朋友应该不会陌生,大概的意思就是说代码可以多次调用,而且多次调用之间不会相互影响,当然,你也可以说递归函数也是多次调用,但是每次调用都会影响到下一次调用,这些概念上的东西,咱就不在此争辩了。再者说,定义这件事情本来就很难,非常人所能办到的。

这里我想说的是另一种意义的“可重入”,就是,多次调用相同的代码,前一次调用产生的结果不会影响后一次调用,有这样的代码吗?有的。比如说,在你写文件的时候,每次都是以“w”的方式去打开文件,那么当你写完文件关闭文件描述符,接着再打开该文件的时候,就会发现每次写入什么内容,最后看到的就是什么内容,无论前一次写入的是什么内容。

那么这类代码有什么用途呢?

比如说,如果我的代码里面有一段是异常处理代码,那么有可能这段会发生runtime error,这类error一旦,通常的处理方法就是直接exit。对于我们engineer来说,这是再普通不过的事情,但是对于customer来说,这可能会成为难以接受的事情。当然,如果desktop software,大不了重新启动一下,用电脑的人肯定都有重启Windows的经验。如果是cluster-level的software,发生runtime error,我们显然不能让customer重启那么多的nodes,那我们该怎么办?我们需要给customer一个feedback,告诉他/她本次执行失败了,但是你可以再一次执行该操作,如果customer选择再次执行,那么我们需要确保之前失败的操作对于第二次执行没有不良影响,也就是说,不论前一次操作干了些什么事,只要第二次操作success,那么整个system就是stable的,这就是上述讲的"可重入"代码的用途。

事实上,在实际过程中,要编写这类代码比较困难,因此如果我们没有办法编写这类代码,那我们可以退而求其次,给customer另一个选择"撤销上次操作",这样就可以消除上次失败的操作带给系统的不良影响,至少能将系统rollback到最近一次配置正确的状态。
阅读(2460) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~