Comparing APIs for Oracle Solaris Threads and POSIX Threads
The Oracle Solaris threads API and the POSIX pthreads API are two solutions to the
same problem: build parallelism into application software. Although each
API is complete, you can safely mix Oracle Solaris threads functions and pthread
functions in the same program.
The two APIs do not match exactly, however. Oracle Solaris threads
support functions that are not found in pthreads, and pthreads include functions
that are not supported in the Oracle Solaris interface. For those functions
that do match, the associated arguments might not, although
the information content is effectively the same.
By combining the two APIs, you can use features not found in one API
to enhance the other API. Similarly, you can run applications that use Oracle Solaris
threads exclusively with applications that use pthreads exclusively on the same system.
Major API Differences
Oracle Solaris threads and pthreads are very similar in both API action
and syntax. The major differences are listed in Figure 13, Table 13, Unique Oracle Solaris Threads and pthreads Features.
Table 13 Unique Oracle Solaris Threads and pthreads Features
| |
thr_ prefix for threads function names, sema_ prefix
for semaphore function names
| pthread_ prefix for pthreads function names, sem_ prefix for semaphore function names
|
Ability to create "daemon" threads
| Cancellation semantics
|
Suspending and continuing a thread
| Scheduling policies
|
|
Function Comparison Table
The following table compares Oracle Solaris threads functions with
pthreads functions. Note that even when Oracle Solaris threads and
pthreads functions appear to be essentially the same, the arguments to
the functions can differ.
When a comparable interface is not available either in pthreads or
Oracle Solaris threads, a hyphen `-' appears in the column. Entries in
the pthreads column that are followed by (3RT) are functions in
librt, the POSIX.1b Realtime Extensions library,
which is not part of pthreads. Functions in this library provide most of
the interfaces specified by the POSIX.1b Realtime Extension.
Table 14 Oracle Solaris Threads and POSIX pthreads Comparison
|
|
thr_create()
|
pthread_create()
|
thr_exit()
|
pthread_exit()
|
thr_join()
|
pthread_join()
|
thr_yield()
|
sched_yield()(3RT)
|
thr_self()
|
pthread_self()
|
thr_kill()
|
pthread_kill()
|
thr_sigsetmask()
|
pthread_sigmask()
|
thr_setprio()
|
pthread_setschedparam()
|
thr_getprio()
|
pthread_getschedparam()
|
thr_setconcurrency()
|
pthread_setconcurrency()
|
thr_getconcurrency()
|
pthread_getconcurrency()
|
thr_suspend()
|
-
|
thr_continue()
|
-
|
thr_keycreate()
|
pthread_key_create()
|
-
|
pthread_key_delete()
|
thr_setspecific()
|
pthread_setspecific()
|
thr_getspecific()
|
pthread_getspecific()
|
-
|
pthread_once()
|
-
|
pthread_equal()
|
-
|
pthread_cancel()
|
-
|
pthread_testcancel()
|
-
|
pthread_cleanup_push()
|
-
|
pthread_cleanup_pop()
|
-
|
pthread_setcanceltype()
|
-
|
pthread_setcancelstate()
|
mutex_lock()
|
pthread_mutex_lock()
|
mutex_unlock()
|
pthread_mutex_unlock()
|
mutex_trylock()
|
pthread_mutex_trylock()
|
mutex_init()
|
pthread_mutex_init()
|
mutex_destroy()
|
pthread_mutex_destroy()
|
cond_wait()
|
pthread_cond_wait()
|
cond_timedwait()
|
pthread_cond_timedwait()
|
cond_reltimedwait()
|
pthread_cond_reltimedwait_np()
|
cond_signal()
|
pthread_cond_signal()
|
cond_broadcast()
|
pthread_cond_broadcast()
|
cond_init()
|
pthread_cond_init()
|
cond_destroy()
|
pthread_cond_destroy()
|
rwlock_init()
|
pthread_rwlock_init()
|
rwlock_destroy()
|
pthread_rwlock_destroy()
|
rw_rdlock()
|
pthread_rwlock_rdlock()
|
rw_wrlock()
|
pthread_rwlock_wrlock()
|
rw_unlock()
|
pthread_rwlock_unlock()
|
rw_tryrdlock()
|
pthread_rwlock_tryrdlock()
|
rw_trywrlock()
|
pthread_rwlock_trywrlock()
|
-
|
pthread_rwlockattr_init()
|
-
|
pthread_rwlockattr_destroy()
|
-
|
pthread_rwlockattr_getpshared()
|
-
|
pthread_rwlockattr_setpshared()
|
sema_init()
|
sem_init()(3RT)
|
sema_destroy()
|
sem_destroy()(3RT)
|
sema_wait()
|
sem_wait()(3RT)
|
sema_post()
|
sem_post()(3RT)
|
sema_trywait()
|
sem_trywait()(3RT)
|
fork1()
|
fork()
|
-
|
pthread_atfork()
|
forkall(), multiple thread copy
|
-
|
-
|
pthread_mutexattr_init()
|
-
|
pthread_mutexattr_destroy()
|
type argument in
mutex_init()
|
pthread_mutexattr_setpshared()
|
-
|
pthread_mutexattr_getpshared()
|
-
|
pthread_mutex_attr_settype()
|
-
|
pthread_mutex_attr_gettype()
|
-
|
pthread_condattr_init()
|
-
|
pthread_condattr_destroy()
|
type argument in
cond_init()
|
pthread_condattr_setpshared()
|
-
|
pthread_condattr_getpshared()
|
-
|
pthread_attr_init()
|
-
|
pthread_attr_destroy()
|
THR_BOUND flag in
thr_create()
|
pthread_attr_setscope()
|
-
|
pthread_attr_getscope()
|
-
|
pthread_attr_setguardsize()
|
-
|
pthread_attr_getguardsize()
|
stack_size argument in
thr_create()
|
pthread_attr_setstacksize()
|
-
|
pthread_attr_getstacksize()
|
stack_addr argument in
thr_create()
|
pthread_attr_setstack()
|
-
|
pthread_attr_getstack()
|
THR_DETACH flag in
thr_create()
|
pthread_attr_setdetachstate()
|
-
|
pthread_attr_getdetachstate()
|
-
|
pthread_attr_setschedparam()
|
-
|
pthread_attr_getschedparam()
|
-
|
pthread_attr_setinheritsched()
|
-
|
pthread_attr_getinheritsched()
|
-
|
pthread_attr_setsschedpolicy()
|
-
|
pthread_attr_getschedpolicy()
|
|
Operation is virtually the same for both Oracle Solaris threads and
for pthreads, even though the function names or arguments might differ.
Only a brief example consisting of the correct include file and the
function prototype is presented. Where return values are not given for
the Oracle Solaris threads functions, see the appropriate pages in
man pages section 3: Basic Library Functions for the function return
values.
For more information about Oracle Solaris related functions, see the
related pthreads documentation for the similarly named function.
Where Oracle Solaris threads functions offer capabilities that are
not available in pthreads, a full description of the functions is
provided.