在多任务操作系统中,应用程序的各个任务并发运行是,经常会出现多个任务“同时”调用一个函数的情况。这里的“同时”实质上是指多个任务在同一个时间段内交叉引用同一个函数的情况,这是并发系统的特点。
由于上述特点的存在,调用这个函数的多个任务就有可能通过该函数而产生意外的耦合,从而产生相互干扰。例如有一个任务A和任务B都要调用函数swap(),而该函数有使用了全局变量temp。
Int temp;
Void swap(int *x,int * y )
{
Temp=*x;
*x=*y;
*y=temp;
}
于是,如果当任务A调用swap()函数期间,系统发生了任务切换,而是任务B也调用了函数swap(),那么任务B将改变全局变量temp的值,从而使任务A传递给全局变量temp的值发生丢失,而出现错误。因此在多任务操作系统中,系统所提供的函数都必须在设计时就采取相应的措施,从而保证函数能够被多个任务所调用。凡是具有这种功能的函数就是可重入函数。
一般来说,如果函数没有使用全局变量,那么就具有了实现可重入函数的基础。为了能够产生可重入函数,用户还要使用可重入编译器。在操作系统移植过程中,如果要修改某些函数,别忘了一定要保证其可重入性。