LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 941|回复: 2

请问可再入函数的意义

[复制链接]
发表于 2007-5-9 09:34:57 | 显示全部楼层 |阅读模式
读UNIX环境高级编程,对可再入函数的意义了解不是很清晰,是指,被信号操作打断后,可以安全继续从打断处执行呢?还是可以安全重新启动?
那么就有了第二个跟这个相关的问题:
如果sigaction的sig_flags设置了SA_RESTART,那么是否所有函数都可以安全的被信号操作打断呢?
比如,malloc,是否只要打断它的信号操作设置了SA_RESTART,那么在信号操作返回后,malloc还可以继续重新执行呢?
发表于 2007-5-9 10:00:00 | 显示全部楼层
可重入函数概念本身和信号没有关系。不可重入函数指的是函数不可以被多个线程同时调用。看下面两个函数:
  1. void swap1 (int *x, int *y) {
  2.     [color=red]static[/color] int tmp;
  3.     tmp = *x;
  4.     *x = *y;
  5.     *y = tmp;
  6. }
  7. void swap2 (int *x, int *y) {
  8.     int tmp;
  9.     tmp = *x;
  10.     *x = *y;
  11.     *y = tmp;
  12. }
复制代码
swap1()是不可重入函数, swap2()是可重入函数。
--------------
google吧,网上的文章很多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-9 13:23:14 | 显示全部楼层
Post by biinn
可重入函数概念本身和信号没有关系。不可重入函数指的是函数不可以被多个线程同时调用。看下面两个函数:
  1. void swap1 (int *x, int *y) {
  2.     [color=red]static[/color] int tmp;
  3.     tmp = *x;
  4.     *x = *y;
  5.     *y = tmp;
  6. }

  7. void swap2 (int *x, int *y) {
  8.     int tmp;
  9.     tmp = *x;
  10.     *x = *y;
  11.     *y = tmp;
  12. }
复制代码

swap1()是不可重入函数, swap2()是可重入函数。
--------------
google吧,网上的文章很多。



那么,将sigaction的sa_flag设置为SA_RESTART,对不可重入函数有什么影响吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表