-D_REENTRANT 宏作用

转载 2013年12月02日 18:26:07

2._REENTRANT宏

在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。类似的问题还存在于fputs之类的函数中,这些函数通常用一个单独的全局性区域来缓存输出数据。

为解决这个问题,需要使用可重入的例程。可重入代码可以被多次调用而仍然工作正常。编写的多线程程序,通过定义宏_REENTRANT来告诉编译器我们需要可重入功能,这个宏的定义必须出现于程序中的任何#include语句之前。

_REENTRANT为我们做三件事情,并且做的非常优雅:

(1)它会对部分函数重新定义它们的可安全重入的版本,这些函数名字一般不会发生改变,只是会在函数名后面添加_r字符串,如函数名gethostbyname变成gethostbyname_r。

(2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入函数。

(3)在error.h中定义的变量error现在将成为一个函数调用,它能够以一种安全的多线程方式来获取真正的errno的值。

 

参考:

Linux多线程编程小结

http://blog.csdn.net/MONKEY_D_MENG/article/details/5628663

-D_REENTRANT编译选项的作用

-D_REENTRANT宏作用    _REENTRANT宏 在一个多线程程序里,默认情况下,只有一个errno变量供所有的 线程共享。假设在一个线程准备获取刚才的错误代码时,该变量很容...
  • uestczshen
  • uestczshen
  • 2016年11月20日 14:07
  • 1110

D_REENTRANT宏

-D_REENTRANT宏 在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。类似的问题还存在于...
  • daisyZH
  • daisyZH
  • 2012年12月25日 14:19
  • 193

gcc选项 -D_REENTRANT机制

gcc 选项 -D_REENTRANT机制_REENTRANT宏在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的...
  • happy_xiahuixiax
  • happy_xiahuixiax
  • 2016年07月17日 14:16
  • 664

简述C语言中宏的作用及其副作用

引问:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?若是 least = MIN(*p++, b);又有何副作用?...
  • cafuc46wingw
  • cafuc46wingw
  • 2014年08月22日 17:19
  • 1794

一年后再次回头看container_of宏的作用

container_of宏在很久以前的文章我就已经有分析写过了,但是看回去,感觉以前自己对这个宏的表达描述分析能力还是有待提高,毕竟那时候刚接触linux内核不久,整个人都懵懵哒,无法说得让别人通俗易...
  • morixinguan
  • morixinguan
  • 2017年01月11日 14:58
  • 757

头文件,宏,extern

关于头文件,宏和extern这几个概念,一直让我混乱不以。上周借着hr姐姐的问题,我决定进行一个简单的梳理,弄清楚基本的概念。...
  • zyhmz
  • zyhmz
  • 2017年03月06日 12:49
  • 269

c/c++中定义的宏的优点和缺点

宏定义好处: (1)少些代码,可以将复杂的宏重定义为简单的。 (2)方便修改,定义一个变量,可以只修改变量,就可达到修改多出 但是对于复杂的宏,可能产生问题 例如定义一个宏函数,宏函数的好处就...
  • zhangyulin54321
  • zhangyulin54321
  • 2012年08月13日 15:32
  • 2392

宏的作用域

1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开...
  • u013176681
  • u013176681
  • 2015年09月27日 20:25
  • 800

JS学习之一简单运用到宏控件中的原理

这几天学习JS,一个简单的宏模拟根据表单输入自动四则运算,比较简单 写于2012/12月份,有啥米问题QQ:285979593留言哒 (function () { ...
  • x_focus
  • x_focus
  • 2013年03月13日 17:12
  • 856

C语言宏定义作用、使用方法小结(2)

要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。   在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成...
  • zhao67865
  • zhao67865
  • 2015年10月10日 11:01
  • 920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:-D_REENTRANT 宏作用
举报原因:
原因补充:

(最多只允许输入30个字)