Man page - pthreads(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr ja ruManual
PTHREADS
名 前説 明
pthreads 関 数 の 返 り 値
ス レ ッ ド ID
ス レ ッ ド セ ー フ な 関 数
async-cancel-safe 関 数
取 り 消 し ポ イ ン ト (cancellation points)
Linux で の コ ン パ イ ル
POSIX ス レ ッ ド の Linux で の 実 装
LinuxThreads
NPTL
ス レ ッ ド 実 装 の 判 定
ス レ ッ ド の 実 装 の 選 択 : LD_ASSUME_KERNEL
関 連 項 目
こ の 文 書 に つ い て
名 前
pthreads - POSIX ス レ ッ ド
説 明
POSIX.1 は 、 一 般 に POSIX ス レ ッ ド や Pthreads と し て 知 ら れ る ス レ ッ ド プ ロ グ ラ ミ ン グ の イ ン タ ー フ ェ ー ス 群 (関 数 、 ヘ ッ ダ ー フ ァ イ ル ) を 規 定 し て い る 。 一 つ の プ ロ セ ス は 複 数 の ス レ ッ ド を 持 つ こ と が で き 、 全 て の ス レ ッ ド は 同 じ プ ロ グ ラ ム を 実 行 す る 。 こ れ ら の ス レ ッ ド は 同 じ 大 域 メ モ リ ー (デ ー タ と ヒ ー プ 領 域 ) を 共 有 す る が 、 各 ス レ ッ ド は 自 分 専 用 の ス タ ッ ク (自 動 変 数 ) を 持 つ 。
POSIX.1 は ス レ ッ ド 間 で ど の よ う な 属 性 を 共 有 す る か に つ い て も 定 め て い る (つ ま り 、 こ れ ら の 属 性 は ス レ ッ ド 単 位 で は な く プ ロ セ ス 全 体 で 共 通 で あ る ):
|
- |
プ ロ セ ス ID |
|||
|
- |
親 プ ロ セ ス ID |
|||
|
- |
プ ロ セ ス グ ル ー プ ID と セ ッ シ ョ ン ID |
|||
|
- |
制 御 端 末 |
|||
|
- |
ユ ー ザ ー ID と グ ル ー プ ID |
|||
|
- |
オ ー プ ン す る フ ァ イ ル デ ィ ス ク リ プ タ ー |
|||
|
- |
レ コ ー ド の ロ ッ ク ( fcntl (3) 参 照 ) |
|||
|
- |
シ グ ナ ル の 配 置 |
|||
|
- |
フ ァ イ ル モ ー ド 作 成 マ ス ク ( umask (2)) |
|||
|
- |
カ レ ン ト デ ィ レ ク ト リ ( chdir (2)) と ル ー ト デ ィ レ ク ト リ ( chroot (2)) |
|||
|
- |
イ ン タ ー バ ル タ イ マ ー ( setitimer (2)) と POSIX タ イ マ ー ( timer_create (2)) |
|||
|
- |
nice 値 ( setpriority (2)) |
|||
|
- |
リ ソ ー ス 制 限 ( setrlimit (2)) |
|||
|
- |
CPU 時 間 ( times (2)) と リ ソ ー ス ( getrusage (2)) の 消 費 状 況 の 計 測 |
ス タ ッ ク に つ い て も 、 POSIX.1 は ど の よ う な 属 性 が 個 々 の ス レ ッ ド で 独 立 に 管 理 さ れ る か を 規 定 し て い る :
|
- |
ス レ ッ ド ID ( pthread_t デ ー タ 型 ) |
|||
|
- |
シ グ ナ ル マ ス ク ( pthread_sigmask (3)) |
|||
|
- |
errno 変 数 |
|||
|
- |
代 替 シ グ ナ ル ス タ ッ ク ( sigaltstack (2)) |
|||
|
- |
リ ア ル タ イ ム ス ケ ジ ュ ー リ ン グ の ポ リ シ ー と 優 先 度 ( sched (7)) |
以 下 の Linux 特 有 の 機 能 も ス レ ッ ド 単 位 で あ る :
|
- |
ケ ー パ ビ リ テ ィ ( capabilities (7) 参 照 ) |
|||
|
- |
CPU affinity (親 和 度 ) ( sched_setaffinity (2)) |
pthreads 関 数 の 返 り 値
Most pthreads functions return 0 on success, and an error number on failure. The error numbers that can be returned have the same meaning as the error numbers returned in errno by conventional system calls and C library functions. Note that the pthreads functions do not set errno . For each of the pthreads functions that can return an error, POSIX.1-2001 specifies that the function can never fail with the error EINTR .
ス レ ッ ド ID
あ る プ ロ セ ス 内 の 各 ス レ ッ ド は ( pthread_t 型 の ) 一 意 な ス レ ッ ド 識 別 子 を 持 つ 。 こ の 識 別 子 は 、 pthread_create (3) の 呼 び 出 し 元 に 返 さ れ る 。 ま た 、 ス レ ッ ド は 自 身 の ス レ ッ ド 識 別 子 を pthread_self (3) を 使 っ て 取 得 で き る 。
Thread IDs are guaranteed to be unique only within a process. (In all pthreads functions that accept a thread ID as an argument, that ID by definition refers to a thread in the same process as the caller.)
The system may reuse a thread ID after a terminated thread has been joined, or a detached thread has terminated. POSIX says: "If an application attempts to use a thread ID whose lifetime has ended, the behavior is undefined."
ス レ ッ ド セ ー フ な 関 数
ス レ ッ ド セ ー フ な 関 数 は 、 複 数 の ス レ ッ ド か ら 同 時 に 呼 び 出 し て も 安 全 な (す な わ ち 、 同 時 に 呼 び 出 さ れ た か に 関 わ ら ず 、 同 じ 結 果 を 返 す ) 関 数 の こ と で あ る 。
POSIX.1-2001 と POSIX.1-2008で は 、 一 部 の 例 外 を 除 き 、 標 準 で 規 定 さ れ て い る 全 て の 関 数 が ス レ ッ ド セ ー フ で あ る こ と を 要 求 し て い る 。 以 下 の 関 数 が 例 外 で あ る 。
asctime()
basename()
catgets()
crypt()
ctermid() (NULL で な い 引 数
を 渡 さ れ た 場
合 )
ctime()
dbm_clearerr()
dbm_close()
dbm_delete()
dbm_error()
dbm_fetch()
dbm_firstkey()
dbm_nextkey()
dbm_open()
dbm_store()
dirname()
dlerror()
drand48()
ecvt() [POSIX.1-2001 の み (POSIX.1-2008
で 削 除 さ れ た )]
encrypt()
endgrent()
endpwent()
endutxent()
fcvt() [POSIX.1-2001 の み (POSIX.1-2008
で 削 除 さ れ た )]
ftw()
gcvt() [POSIX.1-2001 の み (POSIX.1-2008
で 削 除 さ れ た )]
getc_unlocked()
getchar_unlocked()
getdate()
getenv()
getgrent()
getgrgid()
getgrnam()
gethostbyaddr() [POSIX.1-2001 の み
(POSIX.1-2008 で 削 除 さ れ
た )]
gethostbyname() [POSIX.1-2001 の み
(POSIX.1-2008 で 削 除 さ れ
た )]
gethostent()
getlogin()
getnetbyaddr()
getnetbyname()
getnetent()
getopt()
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwuid()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
gmtime()
hcreate()
hdestroy()
hsearch()
inet_ntoa()
l64a()
lgamma()
lgammaf()
lgammal()
localeconv()
localtime()
lrand48()
mrand48()
nftw()
nl_langinfo()
ptsname()
putc_unlocked()
putchar_unlocked()
putenv()
pututxline()
rand()
readdir()
setenv()
setgrent()
setkey()
setpwent()
setutxent()
strerror()
strsignal() [POSIX.1-2008 で 追 加
さ れ た ]
strtok()
system() [POSIX.1-2008 で 追 加 さ
れ た ]
tmpnam() (NULL で な い 引 数
を 渡 さ れ た 場
合 )
ttyname()
unsetenv()
wcrtomb() (最 後 の 引 数
が NULL の 場 合 )
wcsrtombs() (最 後 の 引 数
が NULL の 場 合 )
wcstombs()
wctomb()
async-cancel-safe 関 数
async-cancel-safe 関 数 は 、 非 同 期 キ ャ ン セ ル 機 能 が 有 効 に な っ て い る ア プ リ ケ ー シ ョ ン で 安 全 に 呼 び 出 す こ と が で き る 関 数 の こ と で あ る ( pthread_setcancelstate (3) を 参 照 )。
以 下 の 関 数 だ け が 、 POSIX.1-2001 と POSIX.1-2008 で async-cancel-safe で な け れ ば な ら な い と さ れ て い る 。
pthread_cancel()
pthread_setcancelstate()
pthread_setcanceltype()
取 り 消 し ポ イ ン ト (cancellation points)
POSIX.1 の 規 定 で は 、 特 定 の 関 数 は 取 り 消 し ポ イ ン ト で な け れ ば な ら ず 、 他 の 特 定 の 関 数 は 取 り 消 し ポ イ ン ト で あ っ て も よ い と さ れ て い る 。 あ る ス レ ッ ド が 取 り 消 し 可 能 で 、 そ の 取 り 消 し 種 別 (cancelability type) が 延 期 (deferred) で 、 そ の ス レ ッ ド に 対 す る 取 り 消 し 要 求 が 処 理 待 ち の 場 合 、 取 り 消 し ポ イ ン ト で あ る 関 数 を 呼 び 出 し た 時 点 で 、 そ の ス レ ッ ド の キ ャ ン セ ル が 行 わ れ る 。
POSIX.1-2001 と POSIX.1-2008 の 両 方 、 も し く は い ず れ か 一 方 で は 、 以 下 の 関 数 は 、 取 り 消 し ポ イ ン ト (cancellation points) で あ る こ と が 必 須 と な っ て い る 。
accept()
aio_suspend()
clock_nanosleep()
close()
connect()
creat()
fcntl() F_SETLKW
fdatasync()
fsync()
getmsg()
getpmsg()
lockf() F_LOCK
mq_receive()
mq_send()
mq_timedreceive()
mq_timedsend()
msgrcv()
msgsnd()
msync()
nanosleep()
open()
openat() [POSIX.1-2008 で 追 加 さ
れ た ]
pause()
poll()
pread()
pselect()
pthread_cond_timedwait()
pthread_cond_wait()
pthread_join()
pthread_testcancel()
putmsg()
putpmsg()
pwrite()
read()
readv()
recv()
recvfrom()
recvmsg()
select()
sem_timedwait()
sem_wait()
send()
sendmsg()
sendto()
sigpause() [POSIX.1-2001 only (moves to "may" list
in POSIX.1-2008)]
sigsuspend()
sigtimedwait()
sigwait()
sigwaitinfo()
sleep()
system()
tcdrain()
usleep() [POSIX.1-2001 の み (POSIX.1-2008
で 削 除 さ れ た )]
wait()
waitid()
waitpid()
write()
writev()
POSIX.1-2001 と POSIX.1-2008 の 両 方 、 も し く は い ず れ か 一 方 で は 、 以 下 の 関 数 は 、 取 り 消 し ポ イ ン ト (cancellation points) で あ っ て も よ い こ と に な っ て い る 。
access()
asctime()
asctime_r()
catclose()
catgets()
catopen()
chmod() [POSIX.1-2008 で 追 加 さ
れ た ]
chown() [POSIX.1-2008 で 追 加 さ
れ た ]
closedir()
closelog()
ctermid()
ctime()
ctime_r()
dbm_close()
dbm_delete()
dbm_fetch()
dbm_nextkey()
dbm_open()
dbm_store()
dlclose()
dlopen()
dprintf() [POSIX.1-2008 で 追 加 さ
れ た ]
endgrent()
endhostent()
endnetent()
endprotoent()
endpwent()
endservent()
endutxent()
faccessat() [POSIX.1-2008 で 追 加
さ れ た ]
fchmod() [POSIX.1-2008 で 追 加 さ
れ た ]
fchmodat() [POSIX.1-2008 で 追 加 さ
れ た ]
fchown() [POSIX.1-2008 で 追 加 さ
れ た ]
fchownat() [POSIX.1-2008 で 追 加 さ
れ た ]
fclose()
fcntl() (cmd 引 数 が 何 で
あ っ て も )
fflush()
fgetc()
fgetpos()
fgets()
fgetwc()
fgetws()
fmtmsg()
fopen()
fpathconf()
fprintf()
fputc()
fputs()
fputwc()
fputws()
fread()
freopen()
fscanf()
fseek()
fseeko()
fsetpos()
fstat()
fstatat() [POSIX.1-2008 で 追 加 さ
れ た ]
ftell()
ftello()
ftw()
futimens() [POSIX.1-2008 で 追 加 さ
れ た ]
fwprintf()
fwrite()
fwscanf()
getaddrinfo()
getc()
getc_unlocked()
getchar()
getchar_unlocked()
getcwd()
getdate()
getdelim() [POSIX.1-2008 で 追 加 さ
れ た ]
getgrent()
getgrgid()
getgrgid_r()
getgrnam()
getgrnam_r()
gethostbyaddr() [POSIX.1-2001 の み (こ
の 関 数 は
POSIX.1-2008 で 削 除 さ れ
て い る )]
gethostbyname() [POSIX.1-2001 の み (こ
の 関 数 は
POSIX.1-2008 で 削 除 さ れ
て い る )]
gethostent()
gethostid()
gethostname()
getline() [POSIX.1-2008 で 追 加 さ
れ た ]
getlogin()
getlogin_r()
getnameinfo()
getnetbyaddr()
getnetbyname()
getnetent()
getopt() (opterr が 0 以 外 の
場 合 )
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwnam_r()
getpwuid()
getpwuid_r()
gets()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
getwc()
getwchar()
getwd() [POSIX.1-2001 の み (こ の
関 数 は
POSIX.1-2008 で 削 除 さ れ
て い る )]
glob()
iconv_close()
iconv_open()
ioctl()
link()
linkat() [POSIX.1-2008 で 追 加 さ
れ た ]
lio_listio() [POSIX.1-2008 で 追 加
さ れ た ]
localtime()
localtime_r()
lockf() [POSIX.1-2008 で 追 加 さ
れ た ]
lseek()
lstat()
mkdir() [POSIX.1-2008 で 追 加 さ
れ た ]
mkdirat() [POSIX.1-2008 で 追 加 さ
れ た ]
mkdtemp() [POSIX.1-2008 で 追 加 さ
れ た ]
mkfifo() [POSIX.1-2008 で 追 加 さ
れ た ]
mkfifoat() [POSIX.1-2008 で 追 加 さ
れ た ]
mknod() [POSIX.1-2008 で 追 加 さ
れ た ]
mknodat() [POSIX.1-2008 で 追 加 さ
れ た ]
mkstemp()
mktime()
nftw()
opendir()
openlog()
pathconf()
pclose()
perror()
popen()
posix_fadvise()
posix_fallocate()
posix_madvise()
posix_openpt()
posix_spawn()
posix_spawnp()
posix_trace_clear()
posix_trace_close()
posix_trace_create()
posix_trace_create_withlog()
posix_trace_eventtypelist_getnext_id()
posix_trace_eventtypelist_rewind()
posix_trace_flush()
posix_trace_get_attr()
posix_trace_get_filter()
posix_trace_get_status()
posix_trace_getnext_event()
posix_trace_open()
posix_trace_rewind()
posix_trace_set_filter()
posix_trace_shutdown()
posix_trace_timedgetnext_event()
posix_typed_mem_open()
printf()
psiginfo() [POSIX.1-2008 で 追 加 さ
れ た ]
psignal() [POSIX.1-2008 で 追 加 さ
れ た ]
pthread_rwlock_rdlock()
pthread_rwlock_timedrdlock()
pthread_rwlock_timedwrlock()
pthread_rwlock_wrlock()
putc()
putc_unlocked()
putchar()
putchar_unlocked()
puts()
pututxline()
putwc()
putwchar()
readdir()
readdir_r()
readlink() [POSIX.1-2008 で 追 加 さ
れ た ]
readlinkat() [POSIX.1-2008 で 追 加
さ れ た ]
remove()
rename()
renameat() [POSIX.1-2008 で 追 加 さ
れ た ]
rewind()
rewinddir()
scandir() [POSIX.1-2008 で 追 加 さ
れ た ]
scanf()
seekdir()
semop()
setgrent()
sethostent()
setnetent()
setprotoent()
setpwent()
setservent()
setutxent()
sigpause() [POSIX.1-2008 で 追 加 さ
れ た ]
stat()
strerror()
strerror_r()
strftime()
symlink()
symlinkat() [POSIX.1-2008 で 追 加
さ れ た ]
sync()
syslog()
tmpfile()
tmpnam()
ttyname()
ttyname_r()
tzset()
ungetc()
ungetwc()
unlink()
unlinkat() [POSIX.1-2008 で 追 加 さ
れ た ]
utime() [POSIX.1-2008 で 追 加 さ
れ た ]
utimensat() [POSIX.1-2008 で 追 加
さ れ た ]
utimes() [POSIX.1-2008 で 追 加 さ
れ た ]
vdprintf() [POSIX.1-2008 で 追 加 さ
れ た ]
vfprintf()
vfwprintf()
vprintf()
vwprintf()
wcsftime()
wordexp()
wprintf()
wscanf()
実 装 時 に 、 標 準 規 格 で 規 定 さ れ て い な い そ の 他 の 関 数 を 取 り 消 し ポ イ ン ト と す る こ と も 認 め ら れ て い る 。 特 に 、 停 止 (block) す る 可 能 性 が あ る 非 標 準 の 関 数 を 取 り 消 し ポ イ ン ト と す る 実 装 は あ り 得 る こ と だ ろ う (フ ァ イ ル を 扱 う 可 能 性 の あ る ほ と ん ど の 関 数 が こ れ に 含 ま れ る )。
It should be noted that even if an application is not using asynchronous cancellation, that calling a function from the above list from an asynchronous signal handler may cause the equivalent of asynchronous cancellation. The underlying user code may not expect asynchronous cancellation and the state of the user data may become inconsistent. Therefore signals should be used with caution when entering a region of deferred cancellation.
Linux で の コ ン パ イ ル
Linux で は 、 Pthreads API を 用 い た プ ロ グ ラ ム は cc -pthread で コ ン パ イ ル す べ き で あ る 。
POSIX ス レ ッ ド の Linux で の 実 装
こ
れ ま で 、 2つ の
ス レ ッ ド の 実
装 が Linux の GNU C ラ イ
ブ ラ リ に よ り
提 供 さ れ て き
た 。
LinuxThreads
最 初 の Pthreads の 実 装 。 glibc 2.4 以 降 は 、 こ の 実 装 は も は や サ ポ ー ト さ れ て い な い 。
NPTL (Native POSIX Threads Library)
新 し い Pthreads の 実 装 。 LinuxThreads と 比 べ る と 、 NPTL は POSIX.1 の 要 求 仕 様 へ の 準 拠 の 度 合 い が 高 く 、 多 数 の ス レ ッ ド を 作 成 し た 際 の 性 能 も 高 い 。 NPTL は glibc 2.3.2 以 降 で 利 用 可 能 で あ る 。 NPTL を 利 用 す る に は Linux 2.6 カ ー ネ ル に 実 装 さ れ て い る 機 能 が 必 要 で あ る 。
ど ち ら の 実 装 も い わ ゆ る 1:1 実 装 、 す な わ ち 個 々 の ス レ ッ ド が カ ー ネ ル の ス ケ ジ ュ ー リ ン グ 実 体 に マ ッ ピ ン グ さ れ る 。 ど ち ら の ス レ ッ ド の 実 装 も Linux の clone (2) シ ス テ ム コ ー ル を 利 用 し て い る 。 NPTL で は 、 ス レ ッ ド 同 期 の 基 本 機 構 (mutex や ス レ ッ ド の join 等 ) は Linux の futex (2) シ ス テ ム コ ー ル を 使 っ て 実 装 さ れ て い る 。
LinuxThreads
こ の 実 装 の 大 き な 特 徴 は 以 下 の 通 り で あ る :
|
- |
メ イ ン ス レ ッ ド (最 初 の ス レ ッ ド ) と プ ロ グ ラ ム が pthread_create (3) を 使 っ て 作 成 し た ス レ ッ ド に 加 え 、 こ の 実 装 で は 「 管 理 (manager)」 ス レ ッ ド が 作 成 さ れ る 。 管 理 ス レ ッ ド は ス レ ッ ド の 作 成 と 終 了 を 取 り 扱 う (こ の ス レ ッ ド が う っ か り kill さ れ る と 、 問 題 が 起 こ る こ と が あ る )。 |
||
|
- |
こ の 実 装 で は 内 部 で シ グ ナ ル を 使 用 し て い る 。 Linux 2.2 以 降 で は 、 リ ア ル タ イ ム シ グ ナ ル の う ち 最 初 の 3つ が 使 わ れ る ( signal (7) 参 照 )。 そ れ 以 前 の カ ー ネ ル で は SIGUSR1 と SIGUSR2 が 使 わ れ る 。 ア プ リ ケ ー シ ョ ン は 、 ス レ ッ ド 実 装 で 利 用 さ れ て い る シ グ ナ ル を ど れ も 使 わ な い よ う に し な け れ ば な ら な い 。 |
||
|
- |
ス レ ッ ド 間 で プ ロ セ ス ID を 共 有 し な い (実 際 に は LinuxThreads の ス レ ッ ド は 通 常 よ り は 情 報 を 共 有 す る プ ロ セ ス と し て 実 装 さ れ て い る が 、 一 つ の 共 通 の プ ロ セ ス ID を 共 有 し て は い な い )。 (管 理 ス レ ッ ド を 含 む ) LinuxThreads ス レ ッ ド は ps (1) を 使 う と 別 の プ ロ セ ス の よ う に 見 え る 。 |
LinuxThreads の 実 装 で は POSIX.1 仕 様 か ら 逸 脱 し て い る 点 が い く つ か あ る 。 以 下 に 示 す よ う な 点 が あ る :
|
- |
getpid (2) を 呼 び 出 し た と き に 、 ス レ ッ ド 毎 に 異 な る 値 が 返 さ れ る 。 |
||
|
- |
メ イ ン ス レ ッ ド 以 外 の ス レ ッ ド で getppid (2) を 呼 び 出 す と 、 管 理 ス レ ッ ド の プ ロ セ ス ID が 返 さ れ る 。 本 当 は 、 こ れ ら の ス レ ッ ド で getppid (2) を 呼 ん だ 場 合 に は メ イ ン ス レ ッ ド で の getppid (2) と 同 じ 値 が 返 る べ き で あ る 。 |
||
|
- |
あ る ス レ ッ ド が fork (2) を 使 っ て 新 し い 子 プ ロ セ ス を 作 成 し た 場 合 、 ど の ス レ ッ ド で も こ の 子 プ ロ セ ス を wait (2) で き る べ き で あ る 。 し か し な が ら 、 こ の 実 装 で は 子 プ ロ セ ス を 作 成 し た ス レ ッ ド だ け が こ の 子 プ ロ セ ス を wait (2) で き る 。 |
||
|
- |
あ る ス レ ッ ド が execve (2) を 呼 び 出 し た 場 合 、 他 の ス レ ッ ド は 全 て 終 了 さ れ る (POSIX.1 の 仕 様 通 り )。 し か し な が ら 、 新 し い プ ロ セ ス は execve (2) を 呼 ん だ ス レ ッ ド と 同 じ PID を 持 つ 。 正 し く は メ イ ン ス レ ッ ド と 同 じ PID を 持 つ べ き で あ る 。 |
||
|
- |
ス レ ッ ド 間 で ユ ー ザ ー ID と グ ル ー プ ID が 共 有 さ れ な い こ の こ と は 、 set-user-ID プ ロ グ ラ ム で 面 倒 な 事 態 を 招 い た り 、 ア プ リ ケ ー シ ョ ン が seteuid (2) な ど を 使 っ て 信 用 情 報 (credentials) を 変 更 し た 場 合 に Pthreads 関 数 が 失 敗 す る 原 因 と な る 。 |
||
|
- |
ス レ ッ ド 間 で 共 通 の セ ッ シ ョ ン ID や プ ロ セ ス グ ル ー プ ID を 共 有 し な い 。 |
||
|
- |
ス レ ッ ド 間 で fcntl (2) を 使 っ て 作 成 さ れ る レ コ ー ド ロ ッ ク を 共 有 し な い 。 |
||
|
- |
times (2) と getrusage (2) が 返 す 情 報 が プ ロ セ ス 全 体 の 情 報 で な く ス レ ッ ド 単 位 の 情 報 で あ る 。 |
||
|
- |
ス レ ッ ド 間 で セ マ フ ォ の ア ン ド ゥ 値 ( semop (2) 参 照 ) を 共 有 し な い 。 |
||
|
- |
ス レ ッ ド 間 で イ ン タ ー バ ル タ イ マ ー を 共 有 し な い 。 |
||
|
- |
ス レ ッ ド は 共 通 の nice 値 を 共 有 し な い 。 |
||
|
- |
POSXI.1 で は 、 全 体 と し て の プ ロ セ ス に 送 ら れ る シ グ ナ ル と 、 個 別 の ス レ ッ ド に 送 ら れ る シ グ ナ ル を 区 別 し て 考 え て い る 。 POSIX.1 に よ る と 、 プ ロ セ ス に 送 ら れ た シ グ ナ ル (例 え ば kill (2) を 使 っ て 送 る ) は 、 そ の プ ロ セ ス に 属 す ス レ ッ ド の う ち 勝 手 に (arbitrarily) に 選 択 さ れ た 一 つ の ス レ ッ ド に よ り 処 理 さ れ る こ と に な っ て い る 。 LinuxThreads は プ ロ セ ス に 送 ら れ る シ グ ナ ル の 概 念 に 対 応 し て お ら ず 、 シ グ ナ ル は 特 定 の ス レ ッ ド に だ け 送 る こ と が で き る 。 |
||
|
- |
ス レ ッ ド は そ れ ぞ れ の 独 自 の 代 替 シ グ ナ ル ス タ ッ ク の 設 定 を 持 つ 。 し か し 、 新 し い ス レ ッ ド の 代 替 シ グ ナ ル ス タ ッ ク の 設 定 は そ の ス レ ッ ド を 作 成 し た ス レ ッ ド か ら コ ピ ー さ れ 、 そ の た め ス レ ッ ド は 最 初 は 一 つ の 代 替 シ グ ナ ル ス タ ッ ク を 共 有 す る 。 (仕 様 で は 、 新 し い ス レ ッ ド は 代 替 シ グ ナ ル ス タ ッ ク が 定 義 さ れ て い な い 状 態 で 開 始 さ れ る べ き と さ れ て い る 。 2つ の ス レ ッ ド が 共 有 さ れ て い る 代 替 シ グ ナ ル ス タ ッ ク 上 で 同 時 に シ グ ナ ル の 処 理 を 行 っ た 場 合 、 予 測 不 可 能 な プ ロ グ ラ ム の エ ラ ー が 起 こ り 得 る 。 ) |
NPTL
NPTL で は 、 一 つ の プ ロ セ ス の 全 て の ス レ ッ ド は 同 じ ス レ ッ ド グ ル ー プ に 属 す る ; ス レ ッ ド グ ル ー プ の 全 メ ン バ ー は 同 じ PID を 共 有 す る 。 NPTL は 管 理 ス レ ッ ド (manager thread) を 利 用 し な い 。
NPTL は 内 部 で リ ア ル タ イ ム シ グ ナ ル の う ち 最 初 の 2つ の 番 号 を 使 用 し て お り 、 こ れ ら の シ グ ナ ル は ア プ リ ケ ー シ ョ ン で は 使 用 で き な い 。 詳 細 は nptl (7) を 参 照 の こ と 。
NPTL に も POSIX.1 に 準 拠 し て い な い 点 が 少 な く と も 一 つ あ る :
|
- |
ス レ ッ ド は 共 通 の nice 値 を 共 有 し な い 。 |
NPTL の 標 準 非 準 拠 な 点 の う ち い く つ か は 以 前 の カ ー ネ ル で の み 発 生 す る :
|
- |
times (2) と getrusage (2) が 返 す 情 報 が プ ロ セ ス 全 体 の 情 報 で な く ス レ ッ ド 単 位 の 情 報 で あ る (カ ー ネ ル 2.6.9 で 修 正 さ れ た )。 |
||
|
- |
ス レ ッ ド 間 で リ ソ ー ス 制 限 を 共 有 し な い (カ ー ネ ル 2.6.10 で 修 正 さ れ た )。 |
||
|
- |
ス レ ッ ド 間 で イ ン タ ー バ ル タ イ マ ー を 共 有 し な い (カ ー ネ ル 2.6.12 で 修 正 さ れ た )。 |
||
|
- |
メ イ ン ス レ ッ ド だ け が setsid (2) を 使 っ て 新 し い セ ッ シ ョ ン を 開 始 す る こ と が で き る (カ ー ネ ル 2.6.16 で 修 正 さ れ た )。 |
||
|
- |
メ イ ン ス レ ッ ド だ け が setpgid (2) を 使 っ て そ の プ ロ セ ス を プ ロ セ ス グ ル ー プ リ ー ダ ー に す る こ と が で き る (カ ー ネ ル 2.6.16 で 修 正 さ れ た )。 |
||
|
- |
ス レ ッ ド は そ れ ぞ れ の 独 自 の 代 替 シ グ ナ ル ス タ ッ ク の 設 定 を 持 つ 。 し か し 、 新 し い ス レ ッ ド の 代 替 シ グ ナ ル ス タ ッ ク の 設 定 は そ の ス レ ッ ド を 作 成 し た ス レ ッ ド か ら コ ピ ー さ れ 、 そ の た め ス レ ッ ド は 最 初 は 一 つ の 代 替 シ グ ナ ル ス タ ッ ク を 共 有 す る (カ ー ネ ル 2.6.16 で 修 正 さ れ た )。 |
NPTL の 実 装 で は 以 下 の 点 に つ い て も 注 意 す る こ と :
|
- |
ス タ ッ ク サ イ ズ の リ ソ ー ス の ソ フ ト リ ミ ッ ト ( setrlimit (2) の RLIMIT_STACK の 説 明 を 参 照 ) が unlimited 以 外 の 値 に 設 定 さ れ て い る 場 合 、 ソ フ ト リ ミ ッ ト の 値 が 新 し い ス レ ッ ド の デ フ ォ ル ト の ス タ ッ ク サ イ ズ と な る 。 設 定 を 有 効 に す る た め に は 、 プ ロ グ ラ ム を 実 行 す る 前 に リ ミ ッ ト 値 を 設 定 し て お か な け れ ば な ら な い 。 た い て い は 、 シ ェ ル の 組 み 込 み コ マ ン ド の ulimit -s (C シ ェ ル で は limit stacksize ) を 使 っ て 設 定 す る 。 |
ス レ ッ ド 実 装 の 判 定
glibc 2.3.2 以 降 で は 、 getconf (1) コ マ ン ド を 使 っ て 、 シ ス テ ム の ス レ ッ ド 実 装 を 判 定 す る こ と が で き る 。 以 下 に 例 を 示 す :
bash$ getconf
GNU_LIBPTHREAD_VERSION
NPTL 2.3.4
ぞ れ 以 前 の glibc の バ ー ジ ョ ン で は 、 以 下 の よ う な コ マ ン ド で デ フ ォ ル ト の ス レ ッ ド 実 装 を 判 定 す る こ と が で き る 。
bash$ $( ldd
/bin/ls | grep libc.so | awk '{print $3}' ) | \
egrep -i 'threads|ntpl'
Native POSIX Threads Library by Ulrich Drepper et al
ス レ ッ ド の 実 装 の 選 択 : LD_ASSUME_KERNEL
LinuxThreads と NPTL の 両 方 を サ ポ ー ト し て い る glibc (glibc 2.3. x ) が あ る シ ス テ ム で は 、 LD_ASSUME_KERNEL 環 境 変 数 を 使 う こ と で 、 動 的 リ ン カ ー が デ フ ォ ル ト で 選 択 す る ス レ ッ ド 実 装 を 上 書 き す る こ と が で き る 。 こ の 変 数 に よ り 、 動 的 リ ン カ ー が 特 定 の バ ー ジ ョ ン の カ ー ネ ル 上 で 動 作 し て い る と 仮 定 す る よ う に 指 定 す る 。 NPTL が 必 要 と す る サ ポ ー ト 機 能 を 提 供 し て い な い カ ー ネ ル バ ー ジ ョ ン を 指 定 す る こ と で 、 強 制 的 に LinuxThreads を 使 う こ と が で き る (こ の よ う な こ と を す る 最 も あ り そ う な 場 面 は 、 LinuxThreads の 標 準 非 準 拠 な 振 舞 い に 依 存 す る (壊 れ た ) ア プ リ ケ ー シ ョ ン を 動 作 さ せ る 場 合 だ ろ う )。 以 下 に 例 を 示 す :
bash$ $(
LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \
awk '{print $3}' ) | egrep -i 'threads|nptl'
linuxthreads-0.10 by Xavier Leroy
関 連 項 目
clone (2), fork (2), futex (2), gettid (2), proc (5), attributes (7), futex (7), nptl (7), sigevent (7), signal (7)
pthreads の 各 種 マ ニ ュ ア ル ペ ー ジ 、 例 え ば : pthread_atfork (3), pthread_attr_init (3), pthread_cancel (3), pthread_cleanup_push (3), pthread_cond_signal (3), pthread_cond_wait (3), pthread_create (3), pthread_detach (3), pthread_equal (3), pthread_exit (3), pthread_key_create (3), pthread_kill (3), pthread_mutex_lock (3), pthread_mutex_unlock (3), pthread_mutexattr_destroy (3), pthread_mutexattr_init (3), pthread_once (3), pthread_spin_init (3), pthread_spin_lock (3), pthread_rwlockattr_setkind_np (3), pthread_setcancelstate (3), pthread_setcanceltype (3), pthread_setspecific (3), pthread_sigmask (3), pthread_sigqueue (3), and pthread_testcancel (3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。