信号之函数的可重入性

信号之函数的可重入性
在调用某个函数过程中出现中断信号,且改信号处理函数中再次调用该函数,访问全局、静态变量的函数是不可重入函数。
前后数据不一致,函数是不可重入的,特点:函数中使用全局变量或静态变量。
前后数据一致,函数是可重入的,特征:函数中使用局部变量。

root@spark# cat reinside.c
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>int 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;
}

root@spark# ./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…
root@spark#
运行5秒的时候按下ctrl+z, main函数中调用set函数中的全局变量内容被改写。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET 中处理页面“回退”的方法

我们在编写基于 ASP.NET 的应用程序时&#xff0c;如果代码执行出错或检测到异常&#xff0c;一般会提示用户“返回”或“回退”&#xff0c;或者在多步操作、列表/详细的查看界面中&#xff0c;也会给用户提供回退到上一页面的链接&#xff0c;对于这种情况&#xff0c;大家很…

编辑器

1.FCKeditor 编辑器 FCKeditor is compatible with most internet browsers which include: IE 5.5 (Windows), Firefox 1.0, Mozilla 1.3 and Netscape 7. 最新版本:FCKeditor 2.0 语言环境:多国语言特性功能:所见所得,支持平台众多,支持XHTML 1.0,文本格式设置,常见的编辑,复…

VSTO---excel编程 [待续] [12月5日更新,详见文档下面]

最近比较闲了&#xff0c;考试也快要到了。但是编程技术方面还是不能掉啊.现在开始VSTO编程之旅了。这个话题是连Blog的。所以有兴趣的Blog之友&#xff0c;技术之士&#xff0c;可以匿名或者非匿名的评论&#xff0c;交流。对了&#xff0c;下面的代码都是本人写的&#xff0c…

Rose与PowerDesigner:两款建模工具对比分析比较

一、 二者的出身 作为世界最著名的两大CASE工具&#xff0c;Rational Rose和PowerDesigner的名声可谓如雷贯耳。Rose是当时全球最大的CASE工具提供商Rational的拳头产品&#xff0c;UML建模语言就是由Rational公司的三位巨头Booch、Rumbaugh和Jacobson发明的&#xff0c;后来R…

c#活动目录操作

添加引用 System.DirectoryServices导入命名空间 using System.DirectoryServices;srvip "192.168.1.1"; dn "DCl,DCcom";user "administrator"; pwd "123"; DirectoryEntry de;denewDirectoryEntry("LDAP://"srvip &quo…

[导入]Ajax使用初步

文章来源:http://blog.csdn.net/21aspnet/archive/2007/03/19/1534299.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/20/816309.html

CodeForces 570B,C

CodeForces 570B 题意&#xff1a;给定n和m&#xff0c;然后再&#xff08;1-n&#xff09;中随机取出c&#xff0c;求一个m使得 的概率最大&#xff0c;概率一样时输出最小的m。 思路&#xff1a;只需要看1到m-1和m1和n的最大的那一边就可以了&#xff0c;坑是n1的情况和n为…

验证码(转)

把下面代码存为一个文件code.aspx。另一个文件里调用<img src"code.aspx">using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebCo…

ASP.NET 2.0 的数据源、数据绑定控件概述与区别

一、Render UI 1 GridView GridView 控件用来在表中显示数据源的值。每列表示一个字段&#xff0c;而每行表示一条记录。GridView 控件支持下面的功能&#xff1a; 绑定至数据源控件&#xff0c;如 SqlDataSource。 内置排序功能。 内置更新和删除功能。 内置分页功能。 内…

[导入]javascript总结

1.动态添加一行&#xff0c;和删除当前行<script> var count0; function ff() { var txt1document.getElementById("Text1"); var table1document.getElementById("table1"); rowNotable1.rows.length; Trtable1.insertRow(rowNo); Tr.id"tr&qu…

求助:DataGrid加行号的问题

我的数据是fname,lnameprivatevoidPage_Load(objectsender, System.EventArgs e) { if(!IsPostBack) { myConnectionnew SqlConnection("server127.0.0.1;uidsa;pwdsa;databaseqqq;"); strSQL"SELE…

CVS的使用教程(转)

、什么是CVS? CVS - Concurrent Versions System&#xff08;并发版本管理系统&#xff09;是一个版本控制管理系统&#xff0c;它是目前最为广泛使用的一个系统。 在多人共同开发一个大型项目时&#xff0c;源代码的维护和版本维护是一件令人头疼的事情&#xff0c;由于多人开…

压缩图片上传到数据库

保存到数据库public int DyfcListInsert(int id,string name,string username,string content,Byte[] photo) { string sql "S_DyfcList_Insert"; SqlCommand sqlcmd new SqlCommand(sql,DwzxConfiguration.ConnectDB() ,DwzxConfigu…

使用CodeDom生成程序集

usingSystem;usingMicrosoft.CSharp;usingSystem.CodeDom.Compiler;usingSystem.CodeDom;namespaceTest.CUI{ class Program { static void Main() { // 创建编译器对象 CSharpCodeProvider p new CSharpCodeProvider(); ICodeCompiler cc p.CreateCo…

汇编语言——第1次上机实验

准备&#xff1a; 硬件&#xff1a;pc机&#xff0c;32位win操作系统&#xff0c;能够运行dos&#xff0c;某些64位win10系统可能会不支持 软件&#xff1a;masm程序 实验内容&#xff1a; 1.winr运行dos&#xff0c;cd到指定的masm目录&#xff08;为了调试方便&#xff0c;所…

[导入]一再的变故,终于决定何去何从.

dudu文章来源:http://blog.csdn.net/veiny/archive/2007/09/12/1781906.aspx 转载于:https://www.cnblogs.com/veiny/articles/904703.html

汇编语言——第2次上机实验

实验要求&#xff1a; 求表达式x*yz-200的值 实验步骤&#xff1a; 1.按照实验要求&#xff0c;画出相应的计算流程图 可以看到&#xff0c;先算x*y&#xff08;保存在dx&#xff1a;cx&#xff09;&#xff0c;然后扩展z为双字节&#xff08;dx&#xff1a;ax&#xff09;&am…

SQL Server 2005 中附加只有mdf文件的数据库(修复置疑的数据库)

在利用VSTS中&#xff0c;VSTS不能创建团队项目&#xff0c;数据库ReportServer出现置疑现象&#xff0c;数据库无法打开。修复过程中&#xff0c;由于想利用SQL SERVER 2000的功能&#xff0c;先备份了ReportServer库文件和日志文件&#xff0c;然后删除数据库。在此之前先进行…

是否会成为问题——Linq to Sql的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行“编译”并生成“查询计划”&#xff0c;查询计划告诉Sql Server的查询引擎应该用什么方式进行工作。Sql Server会根据当前它可以收集到的各种信息&#xff08;例如内存大小&#xff0c;索引的统计等等&#xff09;把一条…

介绍及安装

不知读者是否听说过“宠物大战”&#xff1f;大意为Sun公司为帮助开发人员和架构师使用J2EE技术&#xff0c;发布了一个在线宠物商店Sun Java Pet Store。而微软公司则利用.NET技术也发布了一个实现同样功能的PetShop&#xff0c;并且在代码数量、性能等各方面对二者进行了比较…