首页 > 代码库 > Reentrant Function/Thread-Safe/Async-Signal-Safe Function
Reentrant Function/Thread-Safe/Async-Signal-Safe Function
1.Reentrant Function:可重入函数
当捕捉到信号时,不论进程的主控制流程当前执行到哪儿,都会先跳到信号处理函数中执行,从信号处理函数
返回后再继续执行主控制流程。信号处理函数是一个单独的控制流程,因为它和主控制流程是异步的,二者不存在调用和被调用的关系,并且使用不同的堆栈空间。
使用小结:
- 不使用全局变量:上图使用了全局变量head导致出错
- 不调用non-reentrant函数:malloc、标准IO函数
2.Thread-Safe:线程安全
使用小结:
- 使用锁保障线程安全
3.Async-Signal-Safe Function:异步信号安全函数
使用小结:
- signal_handle里面只有几个固定的函数是 signal-safe的(malloc、sprintf等都不是信号安全函数)
- signal_handler里面使用锁很容易死锁:程序的某个线程获得了锁,然后然后还没释放,这时又被信号中断了,然后在signal handler函数里面又尝试去获取锁的话,就会重新获取锁,就死锁了。
参考:
http://idning.github.io/twemproxy-deadlock-on-signal_handler.html
http://wangcong.org/blog/archives/506
http://gmd20.blog.163.com/blog/static/168439232014516113322378/
Reentrant Function/Thread-Safe/Async-Signal-Safe Function
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。