glibc,线程安全与可重入

    技术2022-07-06  178

    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 等。

     下表所示:

     

     

    4. 异步信号安全

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

     

    5. 可重入

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

     

     


    最新回复(0)