库的 MT 安全级别
所有可能由线程从多线程程序中调用的例程都应该是 MT 安全的。因此,例程的两项或多项激活操作必须能够同时正确执行。这样,多线程程序使用的每个库接口都必须是 MT 安全级别。
目前,并非所有库都是 MT 安全的。表 6–3 中列出了常用的 MT 安全库。其他的库最终会被修改为 MT 安全的。
表 6–3 部分 MT 安全的库
库
|
注释
|
lib/libc
|
不安全的接口具有 *_r 形式的线程安全接口,通常包含不同的语义。
|
lib/libdl_stubs
|
支持静态切换编译
|
lib/libintl
|
国际化库
|
lib/libm
|
符合 System V Interface Definition, Edition 3, X/Open and ANSI C 的数学库
|
lib/libmalloc
|
空间有效内存分配库,请参见 malloc(3X)
|
lib/libmapmalloc
|
基于 mmap 的备选内存分配库,请参见 mapmalloc(3X)
|
lib/libnsl
|
TLI 接口、XDR、RPC 客户机和服务器、netdir、netselect 以及 getXXbyYY 接口都不是安全的,但都具有 getXXbyYY_r 形式的线程安全接口
|
lib/libresolv
|
线程特定 errno 支持
|
lib/libsocket
|
用于执行网络连接的套接字库
|
lib/libw
|
支持多字节语言环境的宽字符和宽字符串函数
|
lib/straddr
|
名称到地址的网络转换库
|
lib/libX11
|
X11 Windows 库例程
|
lib/libC
|
C++ 运行时共享对象
|
不安全库
只有在单线程调用时,多进程程序才能安全地调用库中无法保证是 MT 安全级别的例程。