Appearance
可重入函数
C
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int sum(int array[], int len)
{
static int sum = 0;//存在静态变量,使得函数不能重入
for(int i = 0; i<len ; i++)
sum += array[i];
return sum;
}
void task1(void)
{
sum(a, 10);
}
void task2(void)
{
sum(b, 20);
}
可重入函数
- 可以多次重复调用
- 可以被多个任务重复调用
- 运行过程中可以被打断
- 不影响运行结果
不能存在的因素
- 函数内部使用全局或局部变量
- 返回值是一个全局或局部变量
- 内部使用了malloc()/free()
- 函数内部使用了标准的I/O函数
- 调用了其他不可重入的函数
实现的方法
- 和上面相反
操作系统解决方法
在访问公共的资源的时候采取一定的安全措施,实施对资源的互斥访问,或者在访问时不允许被打断
具体方法:信号量、互斥量、锁等机制
临界资源:公共的资源,如全局变量、静态变量、缓冲区、打印机等
临界区:访问临界资源的代码段