-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

Cocos2d-x 一些常见宏的作用

2.常见宏    1)NS_CC_BEGIN cocos2d命名空间开始    2) NS_CC_END  cocos2d命名空间结束    3)USING_NS_CC 声明cocos2d命名空...

c51 reentrant 关键字,用法的一点理解,欢迎板砖!

/* 单片机分 端口映射 和 内存映射 51 为端口映射 但亦可以扩展为内存映射 那样就是混合映射 大部分的非51 cpu为内存映射 端口映射的CPU需要对c语言进行扩展,扩展端口映射语句,s...
  • helezh
  • helezh
  • 2014年09月12日 09:44
  • 1475

可重入(reentrant)函数

什么是函数的可重入性?可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部...

Reentrant vs Thread-safe

Reentrant vs Thread-safe a whole copy of MagicJackTing's blog. thanks ot his sharing. Reentrancy 和...
  • flxue
  • flxue
  • 2016年06月29日 11:40
  • 295

synchornized reentrant lock

synchornized reentrant lock

reentrant(可重入)函数与thread safe(线程安全)函数的区别

reentrant函数与是不是多线程无关,如果是reentrant函数,那么要求即使是同一个进程(或线程)同时多次进入该函数时,该函数 仍能够正确的运作.该要求还蕴含着,如果是在多线程环境中,不同的...
  • TODD911
  • TODD911
  • 2014年09月10日 16:27
  • 943

Java 多线程并发编程之互斥锁 Reentrant Lock

Java 中的锁通常分为两种: 通过关键字 synchronized 获取的锁,我们称为同步锁。java.util.concurrent(JUC)包里的锁,如通过继承接口 Lock 而实现的 R...
  • lddroid
  • lddroid
  • 2017年06月17日 17:11
  • 79

Keil C51对C语言的关键词扩展之十五: reentrant

reentrant声明的函数为可重入函数。可重入的函数能够被多个进程同时调用。可重入函数在执行时,另外的进程可以中断当前执行的函数,并且调用同一个函数。正常情况下,C51程序中的函数不能被递归地调用,...

reentrant函数与thread safe函数浅析

reentrant函数与thread safe函数浅析 http://www.chinaunix.net 作者:ypxing 发表于:2008-02-23 19:46:50 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:-D_REENTRANT 宏作用
举报原因:
原因补充:

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