MT Safety Levels for Libraries
All routines that can potentially be called by a thread from a multithreaded
program should be MT-Safe. Therefore, two or more activations of a routine
must be able to correctly execute concurrently. So, every
library interface that a multithreaded program uses must be MT-Safe.
Not all libraries are now MT-Safe. The commonly used libraries that
are MT-Safe are listed in the following table. The libraries are accessed
in the /usr/lib directory.
Table 18 Some MT-Safe Libraries
| |
| Interfaces that are not safe
have thread-safe interfaces of the form *_r, often with
different semantics.
|
| Math library that is compliant with System V Interface Definition,
Edition 3, X/Open, and ANSI C
|
| Space-efficient memory allocation
library, see malloc()
|
| Alternative mmap-based memory allocation library,
see mapmalloc()
|
| The TLI interface,
XDR, RPC clients and servers, netdir, netselect and getXXbyYY interfaces are not safe, but have thread-safe interfaces
of the form getXXbyYY_r
|
| Domain name server
library routines
|
| Socket library for making
network connections
|
| X11 Windows library routines
|
| C++
runtime shared objects for Oracle C++ 5.0 compilers
|
| C++ standard library for
Oracle C++ 5.0 compilers
|
| Classic iostream library for
Oracle C++ 5.0 compilers
|
| C++
runtime and iostream library for Oracle C++ 4.0 compilers
|
|
Unsafe Libraries
Routines in libraries that are not guaranteed to be MT-Safe can
safely be called by multithreaded programs only when such calls are single threaded.