自己怎样免费建网站,网站建设设计师,网站站点连接不安全,个人网站怎么注册信号之函数的可重入性 在调用某个函数过程中出现中断信号#xff0c;且改信号处理函数中再次调用该函数#xff0c;访问全局、静态变量的函数是不可重入函数。 前后数据不一致#xff0c;函数是不可重入的#xff0c;特点#xff1a;函数中使用全局变量或静态变量。 前后数…信号之函数的可重入性 在调用某个函数过程中出现中断信号且改信号处理函数中再次调用该函数访问全局、静态变量的函数是不可重入函数。 前后数据不一致函数是不可重入的特点函数中使用全局变量或静态变量。 前后数据一致函数是可重入的特征函数中使用局部变量。
rootspark# cat reinside.c
#include stdio.h
#include signal.h
#include stdlib.h
#include unistd.hint g_v[10];
int *h_v;void set(int n)
{printf(begin running set.....\n);int p_v[10];for (int i 0; i 10; i) {p_v[i] n;h_v[i] n;g_v[i] n;sleep(1);}printf(p_v:);for (int i 0; i 10; i) {printf(%d , p_v[i]);}printf(\n);printf(g_v:);for (int i 0; i 10; i) {printf(%d , g_v[i]);}printf(\n);printf(h_v:);for (int i 0; i 10; i) {printf(%d , h_v[i]);}printf(\n);printf(end running set....\n);return;
}void sig_hander(int signo)
{printf(%d receive sigal SIGTSTP...\n, getpid());if (signal(SIGTSTP, sig_hander) SIG_ERR) {perror(sig_hander signal fail);}set(20);return;
}int main(void)
{if (signal(SIGTSTP, sig_hander) SIG_ERR) {perror(signal fail);}h_v (int *)malloc(sizeof(int)*10);if (h_v NULL) {perror(malloc h_v fail);}printf(begin running main....\n);set(10);printf(end running main....\n);return 0;
}
rootspark# ./reinside begin running main… begin running set… ^Z19559 receive sigal SIGTSTP… begin running set… p_v:20 20 20 20 20 20 20 20 20 20 g_v:20 20 20 20 20 20 20 20 20 20 h_v:20 20 20 20 20 20 20 20 20 20 end running set… p_v:10 10 10 10 10 10 10 10 10 10 g_v:20 20 20 20 20 10 10 10 10 10 h_v:20 20 20 20 20 10 10 10 10 10 end running set… end running main… rootspark# 运行5秒的时候按下ctrlz main函数中调用set函数中的全局变量内容被改写。