【C语言】【unix c】可重入函数

来源:互联网 发布:联合网络图书采访 编辑:程序博客网 时间:2024/06/07 23:51
三、可重入函数    信号处理函数的栈桢是私有的(每个函数在栈中都有一个私有的栈针)    信号处理函数和进程的执行是异步的(无需使进程停止等待接收函数的信号)    如果这两条执行路线出现共享资源的竞争,会导致出现问题,所以应该尽量避免竞争(尽量使函数不去访问栈桢以外的资源)    可重入函数主要用于多任务环境中,该函数在执行过程中可以随时被中断,返回来继续执行的时候不会发生错误。他除了使用自身的栈上的变量外,不依赖任何环境(如果要使用全局变量等等还需要做一些措施)    如果函数中使用了全局变量,静态的局部变量,malloc的内存。那么这个函数就是不可重入函数。    可重入函数只能访问栈桢里的内容,如果这个函数只有自动局部变量,那么这个函数就是可重入函数。    举例说明信号处理函数和进程竞争共享资源(count.c)        #include <stdio.h>        #include <signal.h>        int count = 1;        void doit(int n) {            int val;            val = count;            val++;            usleep(5000);            printf("val=%d\n", val);            count = val;            return;        }        int main(void) {            signal(2,doit);            while(1)            doit(3);            return 0;        }
原创粉丝点击