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/

时间: 2024-10-23 16:15:25

Reentrant Function/Thread-Safe/Async-Signal-Safe Function的相关文章

PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone

在用PHP5.3以上的PHP版本时,只要是涉及时间的会报一个 "PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of th

PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别

最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不少类似的文章,还是感觉不够明确和全面,网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释. 本文讲解:VC6与VC9,Thread Safety与None-Thread Safe,Apache module与fastcgi的区别与选择. PHP的大版本主要分三支:PHP4/PHP5/PHP6 其中,PHP4由于太古老.对OO支持不力已基本被淘汰,请无视PHP4. PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,

PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别

最近正好在弄一个PHP的程序,在这之前一直没有怎么以接触,发现对PHP版本知识了解不是很清楚,自己看了不少类似的文章,还是感觉不够明确和全面, 网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释.(内面部分内容是摘自其它程序员的博文) 本文讲解:VC6与VC9,Thread Safety与None-Thread Safe,Apache module与fastcgi的区别与选择. PHP的大版本主要分支:PHP4/PHP5/PHP7(PHP6官方没有) 其中,PHP4由于太古老.对OO支持不

JS function的定义方法,及function对象的理解。

废话篇: 今天看到了javascript的原型链,各种指向,各种对象有木有,各种晕,各种混淆有木有.兼职是挑战个人脑经急转弯的极限啊.不过,最终这一难题还是被我攻克了,哇咔咔.现在就把这东西记下来,免得到时候又忘了就悲催了.... 正文篇: function的定义方法,及function对象的理解. 在我大js中秉承着一切都是对象的原则,不论是方法还是其他都不例外. 我们在使用java的时候经常要编写方法,这时候其用的关键字是function,而在js中我们在编写函数的时候也是用这个关键字,所以

warning: control reaches end of non-void function 和 warning: implicit declaration of function 'rsgClearColor' is invalid in C99

用gcc编译一个程序的时候出现这样的警告: warning: control reaches end of non-void function 它的意思是:控制到达非void函数的结尾.就是说你的一些本应带有返回值的函数到达结尾后可能并没有返回任何值.这时候,最好检查一下是否每个控制流都会有返回值. <Android应用性能优化> p202 hellorendering.rs 文件: #pragma version(1) #pragma rs java_package_name(com.len

Function Programming - 纯函数(Pure Function)

纯函数的定义,非常重要!! Pure function 意指相同的输入,永远会得到相同的输出,而且没有任何显著的副作用. 老样子,我们还是从最简单的栗子开始: var minimum = 21; var OutercompareNumber = function(number) { return number > minimum; } 以及 var InnercompareNumber = function(number) { var minimum = 21; return number >

类非静态成员的函数指针 的使用 Function pointer of a non-static member function of a class

you can get the pointer of the method, but it has to be called with an object typedef void (T::*MethodPtr) (); MethodPtr method = &T::MethodA; T *obj = new T(); obj->*method(); If you need to have non-object pointer and you want to use object then

django后端safe和前端safe的方法

后端 def make_safe(request):    from django.utils.safestring import mark_safe    temp = "<a href='http://www.baidu.com '>百度</a>"    newtemp = mark_safe(temp)    return render(request, 'make_safe.html', {'temp': newtemp}) 全段 |safe

记录一下今天犯得错误,public static function init()写成了public function initialize()

tp5模型事件是放在函数 public static function init() 而我写成了初始化函数,编辑器生成的 public function initialize() 开始时用着没出问题,但是在删除操作之前前我要删除上传的图片时,在执行unlink时总是找不到图片,因为初始化函数已经提前执行了一遍,所以二次执行时找不到图片地址了找了好长时间原因,记录一下 原文地址:https://www.cnblogs.com/jcydd/p/10658272.html

《Nodejs开发加密货币》之十八:地址

前言 上篇我们介绍了亿书的共识机制,是入门部分的补充,这篇开始介绍包括共识机制在内的加密货币的核心技术实现.另外,DPOS共识机制,首先需要通过用户注册为受托人,然后才会有一系列其他的操作,因此要从用户帐号开始.而对于亿书这款加密货币而言,用户帐号本质就是加密货币的地址.本篇,我们就来好好研究它. 源码 account.js https://github.com/Ebookcoin/ebookcoin/blob/master/logic/account.js accounts.js https: