多线程编程指南

库的 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 客户机和服务器、netdirnetselect 以及 getXXbyYY 接口都不是安全的,但都具有 getXXbyYY_r 形式的线程安全接口

lib/libresolv

线程特定 errno 支持

lib/libsocket

用于执行网络连接的套接字库

lib/libw

支持多字节语言环境的宽字符和宽字符串函数

lib/straddr

名称到地址的网络转换库

lib/libX11

X11 Windows 库例程

lib/libC

C++ 运行时共享对象

不安全库

只有在单线程调用时,多进程程序才能安全地调用库中无法保证是 MT 安全级别的例程。