博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
-D_REENTRANT 宏作用
阅读量:6311 次
发布时间:2019-06-22

本文共 538 字,大约阅读时间需要 1 分钟。

_REENTRANT

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

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

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

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

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

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

转载于:https://www.cnblogs.com/RichardLee/archive/2012/03/13/2393928.html

你可能感兴趣的文章
MySQL第三方客户端工具
查看>>
Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE
查看>>
融合健康理念,智能机个人简易检测成为潮流趋势!
查看>>
Oracle11gR2集群心跳单网卡改bond实施方案
查看>>
关于冒泡排序复杂度O(n)
查看>>
【分布式】分布式事务原理与实践
查看>>
HDOJ 2095 find your present (2)
查看>>
架构设计 - 自动化运维之架构设计六要点
查看>>
HDOJ 1339 A Simple Task(简单数学题,暴力)
查看>>
第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
查看>>
匹配中文字符的正则表达式: [/u4e00-/u9fa5]
查看>>
利用Flex组件birdeye绘制拓扑关系图
查看>>
微信小程序把玩(十六)form组件
查看>>
kubelet源码分析(version: git tag 1.7.6)
查看>>
流量控制闸门——LimitLatch套接字连接数限制器
查看>>
GCC同时使用静态库和动态库链接
查看>>
自定义监控(阿里云&zabbix)
查看>>
ZooKeeper 笔记(2) 监听数据变化
查看>>
将Intent序列化,像Uri一样传递Intent!!!
查看>>
MySQL · 引擎介绍 · Sphinx源码剖析(三)
查看>>