JavaScript is required to for searching.
跳过导航链接
退出打印视图
手册页第 5 部分:标准、环境和宏     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

简介

Standards, Environments, and Macros

acl(5)

ad(5)

advance(5)

adv_cap_1000fdx(5)

adv_cap_1000hdx(5)

adv_cap_100fdx(5)

adv_cap_100hdx(5)

adv_cap_10fdx(5)

adv_cap_10hdx(5)

adv_cap_asym_pause(5)

adv_cap_autoneg(5)

adv_cap_pause(5)

adv_rem_fault(5)

ANSI(5)

architecture(5)

ars(5)

ascii(5)

attributes(5)

audit_binfile(5)

audit_flags(5)

audit_remote(5)

audit_syslog(5)

availability(5)

brands(5)

C++(5)

C(5)

cancellation(5)

cap_1000fdx(5)

cap_1000hdx(5)

cap_100fdx(5)

cap_100hdx(5)

cap_10fdx(5)

cap_10hdx(5)

cap_asym_pause(5)

cap_autoneg(5)

cap_pause(5)

cap_rem_fault(5)

charmap(5)

compile(5)

condition(5)

crypt_bsdbf(5)

crypt_bsdmd5(5)

crypt_sha256(5)

crypt_sha512(5)

crypt_sunmd5(5)

crypt_unix(5)

CSI(5)

datasets(5)

device_clean(5)

dhcp(5)

dhcp_modules(5)

environ(5)

eqnchar(5)

extendedFILE(5)

extensions(5)

fedfs(5)

filesystem(5)

fmri(5)

fnmatch(5)

formats(5)

fsattr(5)

grub(5)

gss_auth_rules(5)

hal(5)

iconv_1250(5)

iconv_1251(5)

iconv(5)

iconv_646(5)

iconv_852(5)

iconv_8859-1(5)

iconv_8859-2(5)

iconv_8859-5(5)

iconv_dhn(5)

iconv_koi8-r(5)

iconv_mac_cyr(5)

iconv_maz(5)

iconv_pc_cyr(5)

iconv_unicode(5)

ieee802.11(5)

ieee802.3(5)

ipfilter(5)

ipkg(5)

isalist(5)

ISO(5)

kerberos(5)

krb5_auth_rules(5)

krb5envvar(5)

KSSL(5)

kssl(5)

labels(5)

largefile(5)

ldap(5)

lf64(5)

lfcompile(5)

lfcompile64(5)

link_duplex(5)

link_rx_pause(5)

link_tx_pause(5)

link_up(5)

locale(5)

locale_alias(5)

lp_cap_1000fdx(5)

lp_cap_1000hdx(5)

lp_cap_100fdx(5)

lp_cap_100hdx(5)

lp_cap_10fdx(5)

lp_cap_10hdx(5)

lp_cap_asym_pause(5)

lp_cap_autoneg(5)

lp_cap_pause(5)

lp_rem_fault(5)

man(5)

mansun(5)

me(5)

mech_spnego(5)

mm(5)

ms(5)

MT-Level(5)

mutex(5)

MWAC(5)

mwac(5)

nfssec(5)

NIS+(5)

NIS(5)

nis(5)

nwam(5)

openssl(5)

pam_allow(5)

pam_authtok_check(5)

pam_authtok_get(5)

pam_authtok_store(5)

pam_deny(5)

pam_dhkeys(5)

pam_dial_auth(5)

pam_krb5(5)

pam_krb5_migrate(5)

pam_ldap(5)

pam_list(5)

pam_passwd_auth(5)

pam_pkcs11(5)

pam_rhosts_auth(5)

pam_roles(5)

pam_sample(5)

pam_smbfs_login(5)

pam_smb_passwd(5)

pam_tsol_account(5)

pam_tty_tickets(5)

pam_unix_account(5)

pam_unix_auth(5)

pam_unix_cred(5)

pam_unix_session(5)

pam_user_policy(5)

pam_zfs_key(5)

pkcs11_kernel(5)

pkcs11_kms(5)

pkcs11_softtoken(5)

pkcs11_tpm(5)

pkg(5)

POSIX.1(5)

POSIX.2(5)

POSIX(5)

privileges(5)

prof(5)

pthreads(5)

RBAC(5)

rbac(5)

regex(5)

regexp(5)

resource_controls(5)

sgml(5)

smf(5)

smf_bootstrap(5)

smf_method(5)

smf_restarter(5)

smf_security(5)

smf_template(5)

solaris10(5)

solaris(5)

solbook(5)

stability(5)

standard(5)

standards(5)

step(5)

sticky(5)

suri(5)

SUS(5)

SUSv2(5)

SUSv3(5)

SVID3(5)

SVID(5)

tecla(5)

teclarc(5)

term(5)

threads(5)

trusted_extensions(5)

vgrindefs(5)

wbem(5)

xcvr_addr(5)

xcvr_id(5)

xcvr_inuse(5)

XNS4(5)

XNS(5)

XNS5(5)

XPG3(5)

XPG4(5)

XPG4v2(5)

XPG(5)

zones(5)

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

threads

, pthreads

- POSIX pthread 和 Solaris 线程概念

用法概要

POSIX

cc –mt [ flag... ] file... [ -lrt library... ]
#include <pthread.h> 

Solaris

cc –mt [ flag... ] file... [ library... ]
#include <sched.h>
#include <thread.h>

描述

POSIX 和 Solaris 线程在 libc(3LIB) 中均具有各自的实现。这两个实现可交互操作,其功能相似并可在同一应用程序中使用。只有 POSIX 线程保证可完全移植到符合 POSIX 的其他环境。POSIX 和 Solaris 线程需要不同的源,包括文件和链接系统信息库。请参见“用法概要”部分。

相似之处

大部分 POSIX 和 Solaris 线程函数互相对应。POSIX 函数名称具有 “pthread” 前缀(信号名称除外)。相似的 POSIX 和 Solaris 函数的函数名称也具有相似的结尾。通常,相似的 POSIX 和 Solaris 函数的参数数目和用法相同。

不同之处

POSIX pthread 和 Solaris 线程的不同之处在于:

函数比较

下表对 POSIX pthread 和 Solaris 线程函数进行了比较。当 POSIX pthread 或 Solaris 线程中没有可比较的接口时,列中会显示连字符 ()。

与创建有关的函数

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

与退出有关的函数

POSIX
Solaris
pthread_exit()
thr_exit()
pthread_join()
thr_join()
pthread_detach()

与线程特定数据有关的函数

POSIX
Solaris
pthread_key_create()
thr_keycreate()
pthread_setspecific()
thr_setspecific()
pthread_getspecific()
thr_getspecific()
pthread_key_delete()

与信号有关的函数

POSIX
Solaris
pthread_sigmask()
thr_sigsetmask()
pthread_kill()
thr_kill()

与 ID 有关的函数

POSIX
Solaris
pthread_self()
thr_self()
pthread_equal()
thr_main()

与调度有关的函数

POSIX
Solaris
thr_yield()
thr_suspend()
thr_continue()
pthread_setconcurrency()
thr_setconcurrency()
pthread_getconcurrency()
thr_getconcurrency()
pthread_setschedparam()
thr_setprio()
pthread_setschedprio()
thr_setprio()
pthread_getschedparam()
thr_getprio()

与取消有关的函数

POSIX
Solaris
pthread_cancel()
pthread_setcancelstate()
pthread_setcanceltype()
pthread_testcancel()
pthread_cleanup_pop()
pthread_cleanup_push()

与互斥锁有关的函数

POSIX
Solaris
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_setrobust()
pthread_mutexattr_getrobust()
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()

与条件变量有关的函数

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

与读取器/写入器锁定有关的函数

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

与信号有关的函数

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

与 fork( ) 清理有关的函数

POSIX
Solaris
pthread_atfork()

与限制有关的函数

POSIX
Solaris
pthread_once()

与调试有关的函数

POSIX
Solaris
thr_stksegment()

锁定

同步

多线程行为是异步的,因此针对并发和并行处理进行了优化。由于线程(始终来自同一进程,有时来自多个进程)相互之间共享全局数据,因此无法保证它们对任何时间点的共享数据具有独占访问权限。要获得对共享数据的独占访问权限,需要在线程之间进行同步。POSIX 和 Solaris 均实现了四种同步机制:互斥锁、条件变量、读取器/写入器锁定(优化的频繁读、少量写互斥锁)以及信号。

同步多个线程会大大降低线程并发性。同步的粒度越粗,即锁定的代码块越大,并发性就越小。

MT fork()

如果线程程序调用 fork(2),它会隐式调用只复制调用线程的 fork1(2)。如果整个进程中还有任何待处理的互斥锁,则应用程序应在调用 fork() 之前调用 pthread_atfork(3C) 等待并获取这些互斥锁。

调度

POSIX 线程

Solaris 支持以下三种 POSIX 调度策略:

SCHED_OTHER

传统分时调度策略。该策略基于分时 (timesharing, TS) 调度类。

SCHED_FIFO

先入先出调度策略。如果不被更高优先级抢占,根据此策略调度的线程将会继续执行直至完成。此类线程属于实时 (real-time, RT) 调度类。调用进程必须在其有效集中声明 {PRIV_PROC_PRIOCNTL} 特权。

SCHED_RR

循环调度策略。如果不被更高优先级抢占,根据此策略调度的线程将在系统确定的时段内执行。此类线程属于实时 (real-time, RT) 调度类,调用进程必须在其有效集中声明 {PRIV_PROC_PRIOCNTL} 特权。

除了上述 POSIX 指定的调度策略以外,Solaris 还支持以下调度策略:

SCHED_IA

根据 priocntl(2) 中所述的交互式类 (IA) 策略调度线程。

SCHED_FSS

根据 priocntl(2) 中所述的公平份额类 (FSS) 策略调度线程。

SCHED_FX

根据 priocntl(2) 中所述的固定优先级类 (FSS) 策略调度线程。

Solaris 线程

唯一受支持的调度策略是 SCHED_OTHER,即基于 TS 调度类的分时。

错误

在多线程应用程序中,当有其他线程调用 forkall(2) 时,将会从阻止的系统调用返回 EINTR

用法

-mt 编译器选项

-mt 编译器选项会编译和链接多线程代码。它使用 -D_REENTRANT 编译源文件并适当扩大支持系统信息库集。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
MT 级别
MT-Safe、Fork 1-Safe

另请参见

crle(1)fork(2)priocntl(2)libpthread(3LIB)librt(3LIB)libthread(3LIB)pthread_atfork(3C)pthread_create(3C)attributes(5)privileges(5)standards(5)

《链接程序和库指南》