Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ reentrant(3) — DG/UX 5.4R3.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cancellation(3)

intro(3)



reentrant(3)                   DG/UX 5.4R3.00                   reentrant(3)


NAME
       reentrant - DG/UX reentrant libraries for threads.

DESCRIPTION
       The threads programming model requires that applications call only
       those library functions which are known to be reentrant.  This man
       pages discusses issues specific to using reentrant libraries.  It has
       the following sections:

         ⊕    Definitions

         ⊕    Stack Consumption

         ⊕    Global State

         ⊕    Thread Cancellation

         ⊕    Functions Using Signals

         ⊕    Existing Functions

              This man page provides a snapshot of what functions within the
              (3*) set of man pages are reentrant and non-reentrant.


   Definitions
       Here are some are some definitions of terms used throughout the (3*)
       set of man pages.

       reentrant function    A function whose effect, when called by two or
                             more threads, is guaranteed to be as if the
                             threads each executed the function one after
                             another in an undefined order, even if the
                             actual execution is interleaved.

       threaded application  An application which is linked with the thread
                             library (-lthread).

   Stack Consumption
       You may run into situations where your threaded application will core
       dump due to stack space limitations.  If this occurs, increase your
       stack size from the default.  To find the current stack size, use the
       thread creation attribute pthreadattrgetstacksize().  To set the
       stack use the thread creation attribute pthreadattrsetstacksize().

   Global State
       Some library functions read or write global data.  Since threaded
       applications are no longer serial in nature, you need to be careful
       when accessing these global data, or when calling library routines
       which access them. It is now possible for library functions and
       threaded applications to change global data out from under each
       other.  Some examples are the global variables ctype, daylight,
       optind, etc.




Licensed material--property of copyright holder(s)                         1




reentrant(3)                   DG/UX 5.4R3.00                   reentrant(3)


       The man pages for the POSIX library functions detail when global data
       is used.  See the specific man page for more details.

   Thread Cancellation
       The POSIX standard for threads programming,P1003.4a, is in draft
       form.  Thread cancellation is one area that is still undergoing
       refinement.  For example, P1003.4a draft 6 requires only that an
       implementation document which functions can recognize cancellation
       requests.  Draft 8 requires that only certain functions be able to
       recognize cancellation requests.  It is possible for application
       behavior to change or be broken completely whenever a function's
       cancellation behavior is changed.  We therefore recommend that if
       cancellation must be used, the application should make no assumption
       about the cancellability of any functions.  A coding paradigm that
       insulates the application from changes in this area includes:

         ⊕    If calling any DG/UX functions from the thread, always first
              push a cleanup handler if there is state that might need
              cleanup if any of the functions being called is a cancellation
              point.  The pthread_setintr() call can be used to explicitly
              turn cancellability off and on within a thread.

         ⊕    Wherever a thread is required to recognize cancellation, use a
              call to pthread_testintr().  Do not rely on any particular
              function to contain a cancellation point.

       These steps should help insure that as cancellation points are added
       or removed in future revisions of DG/UX, your application will
       continue to behave in the expected manner.

   Functions Using Signals
       Some functions traditionally modify signal state.  The system
       function is an example.  It changes and then replaces the handlers
       for SIGINT, SIGQUIT and SIGCLD.  Since signal handlers are global to
       the process, all threads see these changes.  Therefore, system
       technically is not reentrant.  Processes which depend on signals and
       use threads are discouraged (see threads.5).

   Existing Functions
       Many previously existing DG/UX functions were not reentrant to start
       with.  Close analysis of libc, libdgc and libm has shown which
       functions require changes.  Changes have been completed in the
       following areas.

       Functions specified in POSIX 1003.1 are reentrant with the exceptions
            identified in POSIX 1003.4a Draft 6 (_r functions).

       Functions used in the implementation of POSIX functions are
       reentrant.  Sometimes these functions are not in the POSIX standard.

       If a non-reentrant function is denoted with an "*", that means there
       is a reentrant counterpart to that function that is named functionr.





Licensed material--property of copyright holder(s)                         2




reentrant(3)                   DG/UX 5.4R3.00                   reentrant(3)


   Non-reentrant functions:
       addseverity    asctime *        crypt               ctermid *
       ctime *        drand48          ecvt                encrypt
       endutent       erand48          fcvt                fgetgrent *
       fgetpwent *    fmtmsg           getc_unlocked       getchar_unlocked
       getdate        getgrent *       getgrgid *          getgrnam *
       getlogin *     getopt           getpass             getpwent *
       getpwnam *     getpwuid *       getutent            getutid
       getutline      gmtime *         grantpt             hcreate
       hdestroy       hsearch          initgroups          jrand48
       l64a           lcong48          localtime *         lrand48
       memalign       monitor          mrand48             nftw
       nrand48        pclose           popen               psiginfo
       ptsname        putc_unlocked    putchar_unlocked    putpwent
       putspent       pututline        rand *              readdir *
       seed48         setkey           setutent            srand48
       strtok *       system           ttyname *           unlockpt
       utmpname       valloc


   Reentrant functions:
       _tolower          _toupper          a64l               abort
       abs               acos              acosf              acosh
       alloca            ascftime          asctime_r          asin
       asinf             asinh             atan               atan2
       atan2f            atanf             atanh              atexit
       atof              atoi              atol               bcmp
       bcopy             berk_signal       bsearch            bzero
       calloc            catclose          catgets            catopen
       cbrt              ceil              ceilf              cfgetispeed
       cfgetospeed       cfsetispeed       cfsetospeed        cftime
       clearerr          clock             closedir           copysign
       cos               cosf              cosh               coshf
       ctermid_r         ctime_r           cuserid            dg_block_seek
       dg_seek           difftime          div                drem
       endgrent          endpwent          erf                erfc
       exp               expf              fabs               fabsf
       fattach           fclose            fdetach            fdopen
       feof              ferror            fflush             ffs
       fgetc             fgetgrent_r       fgetpos            fgetpwent_r
       fgets             fileno            finite             flockfile
       floor             floorf            fmod               fmodf
       fopen             fpclass           fpgetmask          fpgetround
       fpgetsticky       fprintf           fpsetmask          fpsetround
       fpsetsticky       fputc             fputs              fread
       free              freopen           frexp              fscanf
       fseek             fsetpos           ftell              ftok
       ftruncate         ftw               funlockfile        fwrite
       gcvt              getc              getchar            getcwd
       getenv            getgrent_r        getgrgid_r         getgrnam_r
       getlogin_r        getpw             getpwent_r         getpwnam_r
       getpwuid_r        gets              getsubopt          gettxt
       getw              gmtime_r          gsignal            hypot




Licensed material--property of copyright holder(s)                         3




reentrant(3)                   DG/UX 5.4R3.00                   reentrant(3)


       index             insque            isalnum            isalpha
       isascii           isastream         isatty             iscntrl
       isdigit           isgraph           isinf              islower
       isnan             isnand            isnanf             isprint
       ispunct           isspace           isupper            isxdigit
       itoa              j0                j1                 jn
       l3tol             labs              ldexp              ldiv
       lfind             localeconv        localtime_r        lockf
       log               log10             log10f             logb
       logf              longjmp           lsearch            ltol3
       malloc            matherr           mblen              mbstowcs
       mbstring          mbtowc            memccpy            memchr
       memcmp            memcpy            memmove            memset
       mkfifo            mktemp            mktime             mlock
       mlockall          modf              modff              msync
       munlock           munlockall        nextafter          nl_langinfo
       opendir           perror            pfmt               pow
       powf              printf            psignal            putc
       putchar           putenv            puts               putw
       qsort             raise             rand_r             readdir_r
       realloc           realpath          remainder          remove
       remque            rewind            rewinddir          rint
       scalb             scanf             seekdir            setbuf
       setbuffer         setcat            setgrent           setjmp
       setlocale         setpwent          setpwfile          setvbuf
       sigaddset         sigdelset         sigemptyset        sigfillset
       sigismember       siglongjmp        signal             sigsetjmp
       sin               sinf              sinh               sinhf
       sleep             sprintf           sqrt               sqrtf
       srand             sscanf            ssignal            strcat
       strchr            strcmp            strcoll            strcpy
       strcspn           strdup            strerror           strftime
       strlen            strncat           strncmp            strncpy
       strpbrk           strrchr           strspn             strstr
       strtod            strtok_r          strtol             strtoul
       strxfrm           swab              swapcontext        tan
       tanf              tanh              tanhf              tcdrain
       tcflow            tcflush           tcgetattr          tcgetpgrp
       tcgetsid          tcsendbreak       tcsetattr          tcsetpgrp
       tdelete           telldir           tempnam            tfind
       tmpfile           tmpnam            toascii            tolower
       toupper           tsearch           ttyname_r          ttyslot
       twalk             tzset             ungetc             unordered
       usleep            vfprintf          vprintf            vsprintf
       wcstombs          wctomb            y0                 y1
       yn

SEE ALSO
       cancellation(3), intro(3).








Licensed material--property of copyright holder(s)                         4


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026