glibc,线程安全与可重入

1. glibc是什么,以及与gcc的关系?

glibc是gnu发布的libc库,也即c运行库。glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下:
(1)string,字符串处理
(2)signal,信号处理
(3)dlfcn,管理共享库的动态加载
(4)direct,文件目录操作
(5)elf,共享库的动态加载器,也即interpreter
(6)iconv,不同字符集的编码转换
(7)inet,socket接口的实现
(8)intl,国际化,也即gettext的实现
(9)io
(10)linuxthreads
(11)locale,本地化
(12)login,虚拟终端设备的管理,及系统的安全访问
(13)malloc,动态内存的分配与管理
(14)nis
(15)stdlib,其它基本功能
gcc 是编译器,基本上 Linux 下所有的程序(包括内核)都是 gcc 编译的,libc 当然也是。
gcc 和 libc 是互相依赖的两个软件,它们合作的方式类似 Linux 系统的 "自举"。先在一个可以运行的带有老 libc 和 gcc 的系统上,用老 gcc 编译出一个新版本的 gcc + 老 libc,再用这个新 gcc 编译出一个新 gcc + 新 libc,再用这套东东编译整个新系统。

原文地址 http://yew.bloggerspaces.com/2006/07/glibc.html

 

2. 如何查看 glibc 的版本信息?

/lib/libc.so.6 或者 rpm -qa | grep glibc

 

3. glibc 是不是线程安全的?

glibc 应该是符合 POSIX.1标准的。POSIX.1规定大部分的POSIX.1函数以及 ANSI C 函数是线程安全的。除过少数几个函数,比如 asctime、inet_ntoa 等。

 下表所示:

glibc,线程安全与可重入_第1张图片

 

 

4. 异步信号安全

Linux实际编程经验,对于多线程程序,调用线程安全就可以了,能重入最好,但是不强求,多线程调用malloc是可以的。但是,在安装信号处理程序的时候,看看你自己调用的是不是异步信号安全函数,怎么看?很简单,所有异步信号安全的函数在他的man中会十分明确的指出来,没有指出的一律就是不安全的。

 

5. 可重入

malloc与free是不可重入的,标准I/O函数也是不可重入的。

 

 

你可能感兴趣的:(多线程,linux,gcc,编译器,Signal,程序开发)