满足下面条件之一的多数是不可重入函数:
(2)调用了malloc或free;
(3)调用了标准I/O函数;标准io库很多实现都以不可重入的方式使用全局数据结构。
(4)进行了浮点运算许多的处理器/编译器中,浮点一般都是不可重入的 (浮点运算大多使用协处理器或者软件模拟来实现。
(5)调用printf。
在多任务环境中或者实时系统设计中,应该尽可能的使用可重入函数,例如下面的函数:
该函数功能是计算不同篮子里的苹果数,函数体内没有访问全局变量,不使用静态局部变量,只使用局部变量,所以这个函数具有可重入的,如果必须使用全局变量,那么为了保证函数的安全,必须利用互斥信号量或者中断机制来保护全局变量。例如下面函数:
象上面的PV *** 作机制就可以让可重入函数安全的使用全局变量了,而且保证了可并行性。
不可重入函数,例如:
这个函数由于使用了静态全局变量,对sum的并行性 *** 作结果是未知的,是不安全的 *** 做。若此函数被多个进程调用的话,结果是未知的。因为,但语句(1)执行完一次或者几次后,另外使用这个sum的函数可能正好被调度,并得到运行机会,那么这个新运行的函数将使sum变成了另外的值,所以当(1)重新获得运行机会时,sum的值已经变成了另外的值,这是不可预料的结果。
也可以这样总结, 在多任务系统中要进行并行 *** 作,应该保证函数的可重入性(),或者使用信号量、中断等机制来保证数据的安全性 *** 作。
您好,是这样的:
执行完后re=0;
re初始为0
A单元格的CellEndEdit事件处理完成后re=1
当re=1时再执行B单元格的CellBeginEdit;
或者使用一个计数器我觉得可以定义一个全局变量,比如re。
以上就是关于可重入函数与不可重入函数全部的内容,包括:可重入函数与不可重入函数、datagridview 可重入调用问题(vb.net)、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)