The threads man pages, man(3t) , use the following categories to describe how well an interface supports threads (these categories are explained more fully in the Intro(3) reference manual page).
Safe |
This code can be called from a multithreaded application. |
Safe with exceptions |
See the NOTES sections of these pages for a description of the exceptions. |
Unsafe |
This interface is not safe to use with multithreaded applications unless the application arranges for only one thread at a time to execute within the library. |
MT-Safe |
This interface is fully prepared for multithreaded access in that it is both safe and it supports some concurrency. |
MT-Safe with exceptions |
See the NOTES sections of these pages in the man(3t) : Library Routines for a list of the exceptions. |
This routine can safely be called from a signal handler. A thread that is executing an Async-Signal-Safe routine does not deadlock with itself when it is interrupted by a signal. |
|
Fork1-Safe |
This interface releases locks it has held whenever the Solaris fork1(2) or the POSIX fork(2) is called. |
See the table in Appendix C, MT Safety Levels: Library Interfaces,; for the safety levels of interfaces from the man(3): Library Routines. Check the man page to be sure of the level.
Some functions have purposely not been made safe for the following reasons.
Making the interface MT-Safe would have negatively affected the performance of single-threaded applications.
The library has an Unsafe interface. For example, a function might return a pointer to a buffer in the stack. You can use reentrant counterparts for some of these functions. The reentrant function name is the original function name with "_r" appended.
There is no way to be certain that a function whose name does not end in "_r" is MT-Safe other than by checking its reference manual page. Use of a function identified as not MT-Safe must be protected by a synchronizing device or by restriction to the initial thread.
For most functions with Unsafe interfaces, an MT-Safe version of the routine exists. The name of the new MT-Safe routine is always the name of the old Unsafe routine with "_r" appended. The Table 6-1 "_r" routines are supplied in the Solaris system.
Table 6-1 Reentrant Functions
asctime_r(3c) |
gethostbyname_r(3n) |
getservbyname_r(3n) |
ctermid_r(3s) |
gethostent_r(3n) |
getservbyport_r(3n) |
ctime_r(3c) |
getlogin_r(3c) |
getservent_r(3n) |
fgetgrent_r(3c) |
getnetbyaddr_r(3n) |
getspent_r(3c) |
fgetpwent_r(3c) |
getnetbyname_r(3n) |
getspnam_r(3c) |
fgetspent_r(3c) |
getnetent_r(3n) |
gmtime_r(3c) |
gamma_r(3m) |
getnetgrent_r(3n) |
lgamma_r(3m) |
getauclassent_r(3) |
getprotobyname_r(3n) |
localtime_r(3c) |
getauclassnam_r(3) |
getprotobynumber_r(3n) |
nis_sperror_r(3n) |
getauevent_r(3) |
getprotoent_r(3n) |
rand_r(3c) |
getauevnam_r(3) |
getpwent_r(3c) |
readdir_r(3c) |
getauevnum_r(3) |
getpwnam_r(3c) |
strtok_r(3c) |
getgrent_r(3c) |
getpwuid_r(3c) |
tmpnam_r(3s) |
getgrgid_r(3c) |
getrpcbyname_r(3n) |
ttyname_r(3c) |
getgrnam_r(3c) |
getrpcbynumber_r(3n) |
|
gethostbyaddr_r(3n) |
getrpcent_r(3n) |