-D_REENTRANT机制
可重入:
lfl@ubuntu:/usr/include$ vi errno.h
重点看该文件中下面的内容
/* Declare the `errno' variable, unless it's defined as a macro by
bits/errno.h. This is the case in GNU, where it is a per-thread
variable. This redeclaration using the macro still works, but it
will be a function declaration without a prototype and may trigger
a -Wstrict-prototypes warning. */
#ifndef errno
extern int errno;
#endif
红色字体部分即说明errno是一个宏。
lfl@ubuntu:/usr/include/i386-linux-gnu/bits$ vi errno.h
重点看该文件的中下面的内容:
# ifndef __ASSEMBLER__
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ()) //errno 是个宏,代表的是个函数。
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
文件reentrant.c 的内容如下:
#include <errno.h>
int main()
{
errno;
return 0;
}
预处理的过程可以将宏进行替换,下面就进行预处理
lfl@ubuntu:~/test$ gcc -E reentrant.c -o reentrant.i
文件reentrant.i的内容如下:
# 2 "reentrant.c" 2
int main()
{
(*__errno_location ()); //宏errno被替换成这个函数了。
return 0;
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
例子:
int global_val 2;//定义个全局变量
void func()
{
global_val++;
}
如果有N个进程调用该函数,而global_val是个全局变量,如果某个进程加上-D _REENTRANT,则可重入,即该进程的global_val不会受其他进程的影响;但是没加-D _REENTRANT的那N-1个进程调用该函数时变量global_val就会彼此影响,出现不可预料的结果。不会影响的原因是,加-D _REENTRANT的进程虽然调用的还是这个函数,但是不同的时该机制自动把该函数变成了
void func_r()
{
global_val++;
}
跟其他进程调用的函数不同了,那么自然就不会影响本进程了,即可以重去。
-D_REENTRANT机制相关推荐
- 2021-02-02 _REENTRANT
#ifndef _REENTRANT #error "请开启gcc编译器的多线程可重入选项-pthread" #endif 用gcc编译使用了POSIX thread的程序时通常需 ...
- Go语言的错误异常处理机制及其应用
一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...
- 2022-2028年中国机制砂石行业投资分析及前景预测报告
[报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国机制砂石行业市场行业相关概述.中国机制 ...
- c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记
现在 主流的数据库连接池有:Proxool.C3P0.DBCP.tomcat-jdbc.Druid.其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池. Tomcat 在 7.0 ...
- python异常机制
python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...
- 【Sql Server】数据库的安全机制
如何实现安全机制:从以下几个方面,但主要的途径是角色和授权的方面.掌握这些便可以很好的对数据进行保护! 安全机制 客户机 网传(加密) 实例(数据库服务器限制)-服务器角色 Windows OS 验 ...
- 各种注意力机制PyTorch实现
给出了整个系列的PyTorch的代码实现,以及使用方法. 各种注意力机制 Pytorch implementation of "Beyond Self-attention: External ...
- pytorch中调整学习率的lr_scheduler机制
pytorch中调整学习率的lr_scheduler机制 </h1><div class="clear"></div><div class ...
- Pytorch 多 GPU 并行处理机制
Pytorch 的多 GPU 处理接口是 torch.nn.DataParallel(module, device_ids),其中 module 参数是所要执行的模型,而 device_ids 则是指 ...
最新文章
- python主程序流程图_python中的图形渲染(流程图可视化)
- 神策数据、阿里、华为、字节等携手推动个人信息保护工作
- 给Win7光盘添加PE3.0
- js 下拉层级多选_js控制的多级下拉菜单
- Java 1.1.6 码点与码点单元(回)
- NLP --- 命名体识别(NER)
- 如何搭建MySQL数据库,常用的数据库命令
- golang mac 环境变量_mac下配置go基本环境变量参数
- 190102每日一句
- AlphaGo增强式学习算法:实现‘高手指点’特效
- json转为tfrecord格式文件怎么转_JPG图片怎么转换成PDF?图片转PDF的免费软件有这些...
- tenda无线网卡Linux驱动,Ubuntu 10.04上腾达W541U V2.0 无线网卡驱动的使用
- 入驻shopee平台后,选择哪一个站点作为首站?
- Linux拨号上网后自动断开,Ubuntu 12.10 拨号上网及停用方法
- javaweb指导书
- 2 画图软件 界面设计
- JavaScript之DOM(中)
- 数据可视化:处理json文件
- 联想云计算机房建设方案,联想ThinkCloud Livc桌面虚拟化解决方案
- 平均回复在5s内的快捷短语