求教关于信号, 可重入函数(reentrant function)的问题,内付具体一小例
这是一个关于信号, 可重入函数的程序,alarm() 函数每秒放出一个信号,
进入signal handler ,打印被赋值的结构体, 然后继续重复这个过程, 程序如下,问题在下面
#include <signal.h>
#include <stdio.h>
struct two_int {
int a, b;
} data;
void signal_handler(int signum){
printf ("%d, %d\n", data.a, data.b);
alarm (1);
}
int main (void){
static struct two_int zeros = { 0, 0 }, ones = { 1, 1 };
signal (SIGALRM, signal_handler);
data = zeros;
alarm (1);
while (1) {
data = zeros;
data = ones;
}
}
这段代码好像和 可重入 函数有关系
它的打印结果并不是预料的
0,0
1,1
0,0
1,1
而是类似于
0, 0
1, 0
1, 0
1, 1
0, 0
1, 0
0, 1
据我了解,一般机器上比如给data 赋值,会有好几条汇编指令,所以,如果信号从中插一脚,alarm()每秒放一个信号出来
就让程序开始执行信号处理程序,返回后却找不到从哪里开始执行了???之后程序又从哪里开始执行?
比如信号在 data = zeros 这条语句执行过程中发生, 然后执行信号处理程序,信号处理程序结束后,又开始从哪里执行? 难道从 data = ones 开始??
我只能大概体会一下,但用上面的例子,有哪位可以帮忙稍微具体,细节一些说明一下,先谢过!
[ 本帖最后由 madfrogme 于 2012-10-9 17:38 编辑 ]