若一个程序或子程序可以安全的被并行执行,则称其为可重入(reentrant或re-entrant)的;即,当该子程序正在运行时,可以再次进入并执行它。若一个函数是可重入的,则该函数:不能含有静态(全局)非常量数据。 不能返回静态(全局)非常量数据的地址。 只能处理由调用者提供的数据。 不能依赖于单实例模式资源的锁。 不能调用不可重入的函数。 多'用户/对象/进程优先级'以及多进程一般会使得对可重入代码的控制变得复杂。同时,IO代码通常不是可重入的,因为他们依赖于像磁盘这样共享的、单独的资源。可重入性是函数编程语言的关键特性之一。 例子在以下的C语言代码中,函数f和函数g都不是可重入的。int g_var = 1;int f(){ g_var = g_var + 2; return g_var;}int g(){ return f() + 2;}以上代码中,f使用了全局变量 g_var,所以,如果两个线程同时执行它并访问g_var,则返回的结果取决于执行的时间。因此,f不可重入。而g调用了f,所以它也不可重入。稍作修改后,两个函数都是可重入的:int f(int i){ return i + 2;}int g(int i){ return f(i) + 2;}
创新互联-专业网站定制、快速模板网站建设、高性价比巴彦网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式巴彦网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖巴彦地区。费用合理售后完善,10多年实体公司更值得信赖。
可以使用全局变量、静态变量。关键是不是“只读”。如果只读,那怎么用都行。如果有写的操作,最好避开,实在避不开就要用信号量等机制防止多线程冲突。
另外就是调用的函数要线程安全, thread-safe.具体那些函数线程安全,需要查阅手册。
假如,main()中正在调用A()函数.在此期间,有一中断,在中断服务程序中还要调用A().
如果这个A()可以被调用就算是可重入
反之算不可重入.
可重入与不可重入的区别在这个函数的内容是否会相互冲突...例如A()中有个静态变量...就不可以..