Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
threads(5)	      Standards, Environments, and Macros	    threads(5)

       threads,	pthreads - POSIX pthreads and Solaris threads concepts

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

       #include	<pthread.h>

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

       #include	<sched.h>

       #include	<thread.h>

       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-

       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.

       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
	     POSIX (libpthread)		    Solaris (libthread)

       pthread_create()			thr_create()
       pthread_attr_init()		-
       pthread_attr_setdetachstate()	-
       pthread_attr_getdetachstate()	-
       pthread_attr_setinheritsched()	-
       pthread_attr_getinheritsched()	-
       pthread_attr_setschedparam()	-
       pthread_attr_getschedparam()	-
       pthread_attr_setschedpolicy()	-
       pthread_attr_getschedpolicy()	-
       pthread_attr_setscope()		-
       pthread_attr_getscope()		-
       pthread_attr_setstackaddr()	-
       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
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_exit()		     thr_exit()
       pthread_join()		     thr_join()
       pthread_detach()		     -

   Functions Related to	Thread Specific	Data
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_key_create()	     thr_keycreate()
       pthread_setspecific()	     thr_setspecific()
       pthread_getspecific()	     thr_getspecific()
       pthread_key_delete()	     -

   Functions Related to	Signals
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_sigmask()	     thr_sigsetmask()
       pthread_kill()		     thr_kill()

   Functions Related to	IDs
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_self()		     thr_self()
       pthread_equal()		     -
       -			     thr_main()

   Functions Related to	Scheduling
	   POSIX (libpthread)		 Solaris (libthread)
       -			     thr_yield()
       -			     thr_suspend()
       -			     thr_continue()
       pthread_setconcurrency()	     thr_setconcurrency()
       pthread_getconcurrency()	     thr_getconcurrency()
       pthread_setschedparam()	     thr_setprio()
       pthread_getschedparam()	     thr_getprio()

   Functions Related to	Cancellation
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_cancel()		     -
       pthread_setcancelstate()	     -
       pthread_setcanceltype()	     -
       pthread_testcancel()	     -

       pthread_cleanup_pop()	     -
       pthread_cleanup_push()	     -

   Functions Related to	Mutexes
		 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
	    POSIX (libpthread)		   Solaris (libthread)
       pthread_cond_init()	       cond_init()
       pthread_condattr_init()	       -
       pthread_condattr_setpshared()   -
       pthread_condattr_getpshared()   -
       pthread_condattr_destroy()      -
       pthread_cond_wait()	       cond_wait()
       pthread_cond_timedwait()	       cond_timedwait()
       pthread_cond_signal()	       cond_signal()
       pthread_cond_broadcast()	       cond_broadcast()
       pthread_cond_destroy()	       cond_destroy()

   Functions Related to	Reader/Writer Locking
	     POSIX (libpthread)		     Solaris (libthread)
       pthread_rwlock_init()		 rwlock_init()
       pthread_rwlock_rdlock()		 rw_rdlock()
       pthread_rwlock_tryrdlock()	 rw_tryrdlock()
       pthread_rwlock_wrlock()		 rw_wrlock()
       pthread_rwlock_trywrlock()	 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
	   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
	   POSIX (libpthread)		 Solaris (libthread)

       pthread_atfork()		     -

   Functions Related to	Limits
	   POSIX (libpthread)		 Solaris (libthread)
       pthread_once()		     -

   Functions Related to	Debugging
	   POSIX (libpthread)		 Solaris (libthread)
       -			     thr_stksegment()

       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-

       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 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

       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.

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

       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.

   -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.

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

       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       |MT-Level		     |MT-Safe, Fork 1-Safe	   |

       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)


Want to link to this manual page? Use this URL:

home | help