unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Page:
Section:
Apropos / Subsearch:
optional field

threads(5)            Standards, Environments, and Macros           threads(5)



NAME
       threads, pthreads - POSIX pthreads and Solaris threads concepts

SYNOPSIS
   POSIX
       cc -mt [ flag... ] file... -lpthread [ -lrt library... ]

       #include <pthread.h>

   Solaris
       cc -mt [ flag... ] file... [ library... ]

       #include <sched.h>

       #include <thread.h>

DESCRIPTION
       POSIX  and  Solaris  threads  each have their own implementation of the
       threads library. The  libpthread library is associated with POSIX;  the
       libthread  library is associated with Solaris. Both implementations are
       interoperable, their functionality similar, and can be used within  the
       same  application. Only POSIX threads are guaranteed to be fully porta-
       ble to other POSIX-compliant environments. POSIX  and  Solaris  threads
       require different source, include files and linking libraries. See SYN-
       OPSIS.

   Similarities
       Most of the functions in the libpthread and libthread, libraries have a
       counterpart  in  the other corresponding library. POSIX function names,
       with the exception of the semaphore names,  have  a  "pthread"  prefix.
       Function names for similar POSIX and Solaris have similar endings. Typ-
       ically, similar POSIX and Solaris functions have the  same  number  and
       use of arguments.

   Differences
       POSIX pthreads and Solaris threads differ in the following ways:

         o  POSIX threads are more portable.

         o  POSIX threads establish characteristics  for each thread according
            to configurable attribute objects.

         o  POSIX pthreads implement thread cancellation.

         o  POSIX pthreads enforce scheduling algorithms.

         o  POSIX pthreads allow for clean-up handlers for fork(2) calls.

         o  Solaris threads can be suspended and continued.

         o  Solaris threads implement interprocess robust mutex locks.

         o  Solaris threads implement daemon threads,  for  whose  demise  the
            process does not wait.


Function Comparison
       The  following  table  compares  the POSIX pthreads and Solaris threads
       functions. When a comparable interface is not available either in POSIX
       pthreads  or Solaris threads, a hyphen (-) appears in the column.

   Functions Related to Creation
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris      (libthread)       pthread_create()thr_create()
       pthread_attr_init()- pthread_attr_setdetachstate()- pthread_attr_getde-
       tachstate()-   pthread_attr_setinheritsched()-   pthread_attr_getinher-
       itsched()-  pthread_attr_setschedparam()- pthread_attr_getschedparam()-
       pthread_attr_setschedpolicy()-           pthread_attr_getschedpolicy()-
       pthread_attr_setscope()-   pthread_attr_getscope()-   pthread_attr_set-
       stackaddr()- pthread_attr_getstackaddr()-  pthread_attr_setstacksize()-
       pthread_attr_getstacksize()-               pthread_attr_getguardsize()-
       pthread_attr_setguardsize()- pthread_attr_destroy()- -thr_min_stack()


   Functions Related to Exit
       tab(); cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).   POSIX
       (libpthread)Solaris         (libthread)        pthread_exit()thr_exit()
       pthread_join()thr_join() pthread_detach()-


   Functions Related to Thread Specific Data
       tab(); cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).   POSIX
       (libpthread)Solaris   (libthread)   pthread_key_create()thr_keycreate()
       pthread_setspecific()thr_setspecific() pthread_getspecific()thr_getspe-
       cific() pthread_key_delete()-


   Functions Related to Signals
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris    (libthread)    pthread_sigmask()thr_sigsetmask()
       pthread_kill()thr_kill()


   Functions Related to IDs
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris        (libthread)         pthread_self()thr_self()
       pthread_equal()- -thr_main()


   Functions Related to Scheduling
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris (libthread) -thr_yield()  -thr_suspend()  -thr_con-
       tinue() pthread_setconcurrency()thr_setconcurrency() pthread_getconcur-
       rency()thr_getconcurrency()        pthread_setschedparam()thr_setprio()
       pthread_getschedparam()thr_getprio()


   Functions Related to Cancellation
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris  (libthread)  pthread_cancel()-  pthread_setcancel-
       state()-         pthread_setcanceltype()-         pthread_testcancel()-
       pthread_cleanup_pop()- pthread_cleanup_push()-


   Functions Related to Mutexes
       tab(); cw(3.847222i) cw(1.652778i) lw(3.847222i) lw(1.652778i).   POSIX
       (libpthread)Solaris     (libthread)    pthread_mutex_init()mutex_init()
       pthread_mutexattr_init()-               pthread_mutexattr_setpshared()-
       pthread_mutexattr_getpshared()-        pthread_mutexattr_setprotocol()-
       pthread_mutexattr_getprotocol()-    pthread_mutexattr_setprioceiling()-
       pthread_mutexattr_getprioceiling()-        pthread_mutexattr_settype()-
       pthread_mutexattr_gettype()-               pthread_mutexattr_destroy()-
       pthread_mutex_setprioceiling()-         pthread_mutex_getprioceiling()-
       pthread_mutex_lock()mutex_lock() pthread_mutex_trylock()mutex_trylock()
       pthread_mutex_unlock()mutex_unlock()
       pthread_mutex_destroy()mutex_destroy()


   Functions Related to Condition Variables
       tab(); cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).   POSIX
       (libpthread)Solaris      (libthread)     pthread_cond_init()cond_init()
       pthread_condattr_init()-  pthread_condattr_setpshared()-   pthread_con-
       dattr_getpshared()-                         pthread_condattr_destroy()-
       pthread_cond_wait()cond_wait() pthread_cond_timedwait()cond_timedwait()
       pthread_cond_signal()cond_signal()  pthread_cond_broadcast()cond_broad-
       cast() pthread_cond_destroy()cond_destroy()


   Functions Related to Reader/Writer Locking
       tab(); cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).   POSIX
       (libpthread)Solaris    (libthread)   pthread_rwlock_init()rwlock_init()
       pthread_rwlock_rdlock()rw_rdlock()  pthread_rwlock_tryrdlock()rw_tryrd-
       lock()     pthread_rwlock_wrlock()rw_wrlock()     pthread_rwlock_trywr-
       lock()rw_trywrlock()                 pthread_rwlock_unlock()rw_unlock()
       pthread_rwlock_destroy()rwlock_destroy()     pthread_rwlockattr_init()-
       pthread_rwlockattr_destroy()-          pthread_rwlockattr_getpshared()-
       pthread_rwlockattr_setpshared()-


   Functions Related to Semaphores
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris   (libthread)   sem_init()sema_init()   sem_open()-
       sem_close()-      sem_wait()sema_wait()     sem_trywait()sema_trywait()
       sem_post()sema_post()           sem_getvalue()-           sem_unlink()-
       sem_destroy()sema_destroy()


   Functions Related to fork() Clean Up
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris (libthread) pthread_atfork()-


   Functions Related to Limits
       tab(); cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).   POSIX
       (libpthread)Solaris (libthread) pthread_once()-


   Functions Related to Debugging
       tab();  cw(2.750000i) cw(2.750000i) lw(2.750000i) lw(2.750000i).  POSIX
       (libpthread)Solaris (libthread) -thr_stksegment()


LOCKING
   Synchronization
       POSIX  (libpthread)  Solaris  (libthread)  Multi-threaded  behavior  is
       asynchronous,  and  therefore,   optimized  for concurrent and parallel
       processing. As threads, always from within the same process and   some-
       times  from multiple processes, share global data with each other, they
       are not guaranteed exclusive access to the shared data at any point  in
       time.  Securing mutually exclusive access to shared data requires  syn-
       chronization among the threads. Both POSIX and Solaris  implement  four
       synchronization mechanisms: mutexes, condition variables, reader/writer
       locking  (optimized frequent-read occasional-write  mutex),  and  sema-
       phores.

       Synchronizing   multiple  threads  diminishes  their  concurrency.  The
       coarser the grain of synchronization, that is, the larger the block  of
       code that is locked, the lesser the concurrency.

   MT fork()
       If a POSIX threads program calls fork(2), it implicitly calls fork1(2),
       which replicates only the calling thread. Should there be any outstand-
       ing  mutexes  throughout  the  process,  the  application  should  call
       pthread_atfork(3C) to wait for and acquire those mutexes prior to call-
       ing fork().

SCHEDULING
   POSIX
       Scheduling  allocation  size per thread is greater than one. POSIX sup-
       ports the following three scheduling policies:

       SCHED_OTHER     Timesharing (TS) scheduling policy. It is based on  the
                       timesharing scheduling class.



       SCHED_FIFO      First-In-First-Out  (FIFO)  scheduling  policy. Threads
                       scheduled to this policy, if not pre-empted by a higher
                       priority,  will proceed until completion. Threads whose
                       contention scope is system  (PTHREAD_SCOPE_SYSTEM)  are
                       in real-time (RT) scheduling class. The calling process
                       must have a effective user  ID  of  0.  SCHED_FIFO  for
                       threads     whose     contention     scope's    process
                       (PTHREAD_SCOPE_PROCESS) is based on the  TS  scheduling
                       class.



       SCHED_RR        Round-Robin  scheduling  policy.  Threads  scheduled to
                       this policy, if not pre-empted by  a  higher  priority,
                       will  execute  for a time period determined by the sys-
                       tem.  Threads  whose   contention   scope   is   system
                       (PTHREAD_SCOPE_SYSTEM) are in real-time (RT) scheduling
                       class and the calling process  must  have  a  effective
                       user  ID  of  0.  SCHED_RR for threads whose contention
                       scope is process (PTHREAD_SCOPE_PROCESS)  is  based  on
                       the TS scheduling class.



   Solaris
       Only  scheduling policy supported is SCHED_OTHER, which is timesharing,
       based on the TS scheduling class.

ERRORS
       In a multi-threaded application, linked with libpthread  or  libthread,
       EINTR  may  be  returned  whenever another thread calls  fork(2), which
       calls  fork1(2) instead. To ensure proper library  linking  order,  use
       this option, rather than -lthread, to link with libthread.

USAGE
   -mt compiler option
       The  -mt  compiler option compiles and links for multithreaded code. It
       compiles source files with -D_REENTRANT and augments the set of support
       libraries to include -lthread in the required order.

       To  ensure  proper  library  linking order, use this option rather than
       -lthread to link with libthread.

ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:


       tab()    allbox;    cw(2.750000i)|     cw(2.750000i)     lw(2.750000i)|
       lw(2.750000i).   ATTRIBUTE  TYPEATTRIBUTE  VALUE  MT-LevelMT-Safe, Fork
       1-Safe


SEE ALSO
       crle(1),  fork(2),  libpthread(3LIB),   librt(3LIB),   libthread(3LIB),
       pthread_atfork(3C), pthread_create(3C), attributes(5), standards(5)

       Linker and Libraries Guide




SunOS 5.10                        20 Aug 2003                       threads(5)