可重入函数
时间:2011-05-31 来源:SimonBlog
可重入函数
Y=f(x)
如果2次顺序调用,其结果不同,那么不是可重入的。
这是说的单线程,2次调用情况。这是程序员有意调用,它设计这个函数就是为了有状态。
例子就是局部static变量。
还有一类问题是 多线程,就是不是有意调用2次,而是无意中调用。并发调用,谁先谁后不知道,但是后调的,结果不是预期的。C库里面很多使用静态变量的如gethostname就是这个问题。
可重入函数的本质在于,函数是有状态的。2次调用,是不同的状态。
真实世界存在这样的模型,需要用有状态函数模拟。
事实上,object就是有状态的例子,它的data member你可以看作是状态,不同的member function就是 不可重入地、共享状态的一堆函数。
Object本质是围绕共同数据的一堆函数,共同数据是堆上面的一块内存,this
这堆函数间是有关系的,有顺序关系,最初状态的初始化,在构造函数里面完成。
真实的世界是,一个CD机要唱歌,先要加电,不加电时,点击下一首,没有用,因为没有进入“已加电”状态。这类东西,用object很容易模拟,因为模型和真实,对应很明显。
相关阅读 更多 +