首页 > 产品 > 问答 > 可重入函数,什么是可重入

可重入函数,什么是可重入

来源:整理 时间:2023-09-03 04:13:22 编辑:智能门户 手机版

本文目录一览

1,什么是可重入

可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。可重入函数:不为连续的调用持有静态数据。不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。

什么是可重入

2,什么是C语言的可重入函数怎么使用

从字面上的意思就是,可以重复进入。可重入是在多任务系统下的概念,意思是这个函数可以在运行到任意位置的时候被中断去执行其他任务,并且返回的时候不会出现任何错误。为什么在多任务的时候才有这种概念。我举个例子,我们定义了一个叫func的函数,同时定义了两个线程,两个线程都调用了func,那么就存在这种情况,线程1正在执行func的时候,线程2开始执行func了,导致两个时刻两个线程都在执行func,正常情况下两个都能执行成功,并且没有错误,我们就认为func是可重入的。但是如果func使用了公共资源,比如读取同一个文件,或者访问了同一个全局变量,这时候就会导致两个线程访问公共资源时发生冲突,这样的函数就是不可重入的。

什么是C语言的可重入函数怎么使用

3,单片机C语言设计里说的可重入函数是什么和不可重入函数的区别是

一、可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入 函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 2)可重入函数: 不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。 如果必须访问全局变量,记住利用互斥信号量来保护全局变量。 绝不调用任何不可重入函数。 3)不可重入函数: 函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 函数返回静态变量。 函数中调用了不可重入函数。 函数体内使用了静态的数据结构; 函数体内调用了malloc()或者free()函数; 函数体内调用了其他标准I/O函数。 函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。 总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。

单片机C语言设计里说的可重入函数是什么和不可重入函数的区别是

4,单片机C语言设计里说的可重入函数是什么和不可重入函数的区别是什么

一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入 函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数:不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。3)不可重入函数:函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 函数返回静态变量。 函数中调用了不可重入函数。函数体内使用了静态的数据结构;函数体内调用了malloc()或者free()函数;函数体内调用了其他标准I/O函数。函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。

5,什么是C语言的可重入函数怎么使用

重载函数吧,就是可以根据需要自己重新定义这个函数,例如改变它的参数和返回值类型
假如,main()中正在调用A()函数.在此期间,有一中断,在中断服务程序中还要调用A().如果这个A()可以被调用就算是可重入 反之算不可重入.可重入与不可重入的区别在这个函数的内容是否会相互冲突...例如A()中有个静态变量...就不可以..
从字面上的意思就是,可以重复进入。可重入是在多任务系统下的概念,意思是这个函数可以在运行到任意位置的时候被中断去执行其他任务,并且返回的时候不会出现任何错误。为什么在多任务的时候才有这种概念。我举个例子,我们定义了一个叫func的函数,同时定义了两个线程,两个线程都调用了func,那么就存在这种情况,线程1正在执行func的时候,线程2开始执行func了,导致两个时刻两个线程都在执行func,正常情况下两个都能执行成功,并且没有错误,我们就认为func是可重入的。但是如果func使用了公共资源,比如读取同一个文件,或者访问了同一个全局变量,这时候就会导致两个线程访问公共资源时发生冲突,这样的函数就是不可重入的。
我认为c语言中函数是最美的,怎么使用?其实就是主函数调用。函数调用必须先定义后调用或先声明后调用。函数调用用传值调用、传地址调用、递归调用。还是多看看书,多练,用熟了你就发现它的美了!

6,可重入函数的不可重入

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务用到的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入函数是指一个可以被多个任务调用的函数(过程),任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:1) 函数体内使用了静态的数据结构;2) 函数体内调用了malloc()或者free()函数;3) 函数体内调用了标准I/O函数。下面举例加以说明。A. 可重入函数void strcpy(char *lpszDest, char *lpszSrc) while(*lpszDest++=*lpszSrc++);*dest=0;}B. 不可重入函数1char cTemp;//全局变量void SwapChar1(char *lpcX, char *lpcY) cTemp=*lpcX;*lpcX=*lpcY;lpcY=cTemp;//访问了全局变量}C. 不可重入函数2void SwapChar2(char *lpcX,char *lpcY) static char cTemp;//静态局部变量cTemp=*lpcX;*lpcX=*lpcY;lpcY=cTemp;//使用了静态局部变量}

7,请问单片机中的可重入函数与不可重入函数的区别是什么

可重入函数一般用在数据的递归运算中,直白点的讲就是能自身调用自身,在运行时会在每次调用时把上次的数据存入虚拟堆栈中,待回复运行后数据释放。不可重入函数在数据中间数据存储上不同,是直接释放,数据不可恢复。但我没有用过不可重入函数的递归调用,不好说是什么后果。再者,这两者更有一种属性上的差别。
此问题比较严重的可能出现在用KEIL C51编译器编写51内核的单片机上的C程序时。由于KEIL优化变量的方式采用了覆盖技术,就是同一内存地址可能反复分配给不同的函数,例如:就导致了MAIN函数内调用的延时函数的变量被中断函数调用的同一延时函数的变量覆盖的极大的可能。因此当在KEIL C51中编写可能同时被多个函数调用的子函数时最好申明为可重入函数。
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入 函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数:不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。绝不调用任何不可重入函数。3)不可重入函数:函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 函数返回静态变量。 函数中调用了不可重入函数。函数体内使用了静态的数据结构;函数体内调用了malloc()或者free()函数;函数体内调用了其他标准i/o函数。函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。

8,什么是可重入函数和不可重入函数转

可重入函数在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准I/O函数。可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,即保存在CPU寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。说法2:一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是 不能运行在多任务环境下的。基本上下面的函数是不可重入的(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准I/O函数。把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写他。其实很简单,只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的。第一,不要使用全局变量。因为别的代码很可能覆盖这些变量值。第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做进入/退出核心或者用OS_ENTER_KERNAL/OS_EXIT_KERNAL来描述。//这是临界区保护第三,不能调用任何不可重入的函数。第四,谨慎使用堆栈。最好先在使用前先OS_ENTER_KERNAL。还有一些规则,都是很好理解的,总之,时刻记住一句话:保证中断是安全的!

9,什么是可重入函数

可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。  可重入函数也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。如果确实需要访问全局变量(包括static),一定要注意实施互斥手段。可重入函数在并行运行环境中非常重要,但是一般要为访问全局变量付出一些性能代价。  参考资料:http://baike.baidu.com/view/2394660.htm
不是重载函数,是可重入函数。可重入函数主要是指多线程可重入函数。虽然一般的递归也可以算作重入,但是一般不这样讲。可重入函数主要问题是线程同步的问题。最好参考有关操作系统的书籍。
reload funcation比如:int fun(int i);int fun(int i,int j);函数名和返回值一样,但参数列表不一样,这样的就叫重载函数
可重入函数在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准i/o函数。可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,即保存在cpu寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。说法2:一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是 不能运行在多任务环境下的。基本上下面的函数是不可重入的(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准i/o函数。把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写他。其实很简单,只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的。第一,不要使用全局变量。因为别的代码很可能覆盖这些变量值。第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做进入/退出核心或者用os_enter_kernal/os_exit_kernal来描述。//这是临界区保护第三,不能调用任何不可重入的函数。第四,谨慎使用堆栈。最好先在使用前先os_enter_kernal。还有一些规则,都是很好理解的,总之,时刻记住一句话:保证中断是安全的!

10,什么是可重入函数和不可重入函数转

可重入函数在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准I/O函数。可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,即保存在CPU寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。说法2:一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是 不能运行在多任务环境下的。基本上下面的函数是不可重入的(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准I/O函数。把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写他。其实很简单,只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的。第一,不要使用全局变量。因为别的代码很可能覆盖这些变量值。第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做进入/退出核心或者用OS_ENTER_KERNAL/OS_EXIT_KERNAL来描述。//这是临界区保护第三,不能调用任何不可重入的函数。第四,谨慎使用堆栈。最好先在使用前先OS_ENTER_KERNAL。还有一些规则,都是很好理解的,总之,时刻记住一句话:保证中断是安全的!
4种职业四转任务流程基本一致,只是在选择问题时和寻找npc时略有不同.现就天音给大家做详细介绍。 1、等级到达105自动接到任务,飞鸽传书和天人五问。 去天音寺寻找法相。接到飞鸽传书。 接到天人五问 2、去拜访河阳的轩辕天师,解答天人五问,以便修成正果。 3、天师的派头就是和别人不同,不下坐骑你休想进去一睹尊容。还是乖乖的下来吧 这里的任务有选择的,但无论你选择哪个,要做的任务都是一样的。所以看你个人喜好想接什么就接什么了。好了准备好了吗,准备好了跟我来。 接到第一问,问我志向如何。这里郑重说明一下天人五问的第一问如果你是男号选择第二个选项“红颜知己,天涯比翼拉”则不用打怪而是去流波找张少泽(忠义碑处npc),回轩辕天师复命后,直接进入第二问,无须杀300怪。[女号要是选次项则要杀怪300在30分钟内] 4、大师说我需要历练,接到时间任务一个,30分钟内杀100个焚香渔人,100个双头怪,100个狐妖。这个时候我们先前准备的飞天符就要发挥作用了,来跟我一起飞吧! 5、回到河阳轩辕天师那,接着接受他老人家的教诲。 接到第二问---问命 这里的选择也不会影响任务流程的,随心所欲的选吧 6、接到新的任务,消灭酆都鬼使1个,酆都鬼使就在河阳义庄旁边。此任务怪攻击不是很高,但防御力高,血又长。加油吧! 7、第2次考验结束完成,接着去找轩辕天师接受教诲。 接到第三问--问法 继续选择吧,选哪个都无所谓的 8、接到新的任务,准备天机奇石、天机灵石各6个交给河阳城的了尘子 9、继续去找轩辕天师,继续接受他教诲 接到第四问--问情 这里的选择不同,完成任务的npc也不同,建议选择第二个,我选择的是第一个,结果跑到青云去找陆雪琪,好远啊。还是第一个好,就在河阳城里找幽姬,此npc在青龙旁边。 这里需要情花9多。回焚香谷杀兰花妖媚获得情花,如果我们事先准备好飞天符,可以省去奔跑的功夫。 好了任务完成,陪我去找陆雪琪吧,虽然路途远点,为了看美女也值得! 10、任务完成,接着去找轩辕天师 接到第五问---天道如何,个人选择第一个答案天道在情。 这里的选择不同,要杀的任务怪也不同,建议选择第一个,第一个任务怪就在附近,省去跑的路途。偶有一个号选的第2个,跑了好远才找到! 选择情,要杀戊道天将一个 天将老人家正在河边悠闲的看风景,他一定不知道危险在慢慢的靠近哦
文章TAG:可重入函数什么是可重入

最近更新

  • 逆变器原理图,逆变器原理图越详细越好逆变器原理图,逆变器原理图越详细越好

    逆变器原理图越详细越好2,逆变电路原理3,逆变器的工作原理4,逆变的工作原理5,光伏发电逆变器工作原理6,逆变器是什么原理及典型电路1,逆变器原理图越详细越好直流电源供电给振荡器,振荡器发生.....

    问答 日期:2023-09-03

  • 富士康机器人考试富士康机器人考试

    富士康考试主要考试什么?2022现在富士姚康考试Mojin富士kangdelise考试!郑州富士康培训总结考试考什么不考考试,直接签合同发放到部门。富士康IDPBG事业群全体技术人员考试考试内容是什么.....

    问答 日期:2023-09-03

  • 数据的统计调查报告,大学生生活费统计调查报告数据的统计调查报告,大学生生活费统计调查报告

    统计Survey报告如何分析总结自己没有说清楚的话统计Survey报告啊,统计学习调查-。★怎么写统计-2/Analysis-1统计-2/是金融银行系统最常用的,谁知道怎么写math统计Investigation报告。1.....

    问答 日期:2023-09-03

  • 360大数据安全部门,哪个部门负责国家数据安全工作360大数据安全部门,哪个部门负责国家数据安全工作

    360安全大脑与360安全中心360安全大脑是360公司的分布式智能安防系统,综合利用人工智能、大数据和云计算,360安全中心是国内最大的免费安全平台。由奇虎360于2006年7月创办,也是奇虎360系.....

    问答 日期:2023-09-03

  • 电脑内存数据恢复软件哪个好用电脑内存数据恢复软件哪个好用

    电脑Data恢复软件免费版哪个好?data恢复软件Which好用便宜?数据丢失恢复软件哪个好?什么资料恢复软件最好的u盘文件恢复软件What好用?电脑File恢复软件常用哪四款电脑恢复软件推荐89。-4/(.....

    问答 日期:2023-09-03

  • 中间继电器接线方法,中间继电器怎么接线中间继电器接线图中间继电器接线方法,中间继电器怎么接线中间继电器接线图

    中间继电器怎么接线中间继电器接线图2,二十四V中间继电器接线法3,中间继电器怎样接线4,中间继电器怎么接线5,中间继电器的使用与接线方法是什么6,中间继电器接线法时间继电器接线法1,中间继.....

    问答 日期:2023-09-03

  • 一个笑话看懂大数据一个笑话看懂大数据

    Da数据是营销词汇还是方法论?对“达”的误解数据:/Statistics≠Da数据对“达”的误解数据:/Statistics≦。Da数据创业数据你从哪里来的?大数据创业:数据你从哪里来。1、北京人能忍的通勤.....

    问答 日期:2023-09-03

  • 医疗机器人有哪些医疗机器人有哪些

    机器人有哪些种类?医疗机器人设计?什么是医疗机器人?3)娱乐机器人包括玩耍机器人、跳舞机器人、玩具机器人等。机器人按应用分类可分为行业机器人、极限机器人、娱乐机器人,医疗机器人有哪.....

    问答 日期:2023-09-03