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
NOMDESCRIPTION
Valeurs de retour des fonctions pthreads
Identifiants de thread
Fonctions sûres du point de vue des threads
Fonctions pour annulations sûres asynchrones
Points dâannulation
Compiler sous Linux
Implémentations des threads POSIX sous Linux
LinuxThreads
NPTL
DĂ©terminer lâimplĂ©mentation des threads utilisĂ©e
Choisir lâimplĂ©mentation des threads : LD_ASSUME_KERNEL
VOIR AUSSI
TRADUCTION
NOM
pthreads â Threads POSIX
DESCRIPTION
POSIX.1 dĂ©crit une sĂ©rie dâinterfaces (fonctions et fichiers dâen-tĂȘtes) pour la programmation multithread, couramment appelĂ©e threads POSIX, ou pthreads. Un unique processus peut contenir plusieurs threads, qui exĂ©cutent tous le mĂȘme programme. Ces threads partagent la mĂȘme mĂ©moire globale (segments de donnĂ©es et tas), mais chaque thread a sa propre pile (variables automatiques).
POSIX.1 requiert aussi que les threads partagent une sĂ©rie dâautres attributs (ces attributs sont par processus, plutĂŽt que par thread) :
|
- |
identifiant de processus (PID) |
||
|
- |
identifiant de processus parent (PPID) |
||
|
- |
identifiant de groupe de processus (PGID) et identifiant de session (SID) |
||
|
- |
terminal de contrĂŽle |
||
|
- |
identifiants dâutilisateur et de groupe |
||
|
- |
descripteurs de fichier ouverts |
||
|
- |
verrouillages dâenregistrements (consultez fcntl (2)) |
||
|
- |
gestion de signaux |
||
|
- |
masque de création de mode de fichier ( umask (2)) |
||
|
- |
répertoire de travail ( chdir (2)) et répertoire racine ( chroot (2)) |
||
|
- |
temporisations dâintervalle ( setitimer (2)) et temporisations POSIX ( timer_create (2)) |
||
|
- |
valeur de politesse ( setpriority (2)) |
||
|
- |
limites de ressources ( setrlimit (2)) |
||
|
- |
mesures de consommation de temps CPU ( times (2)) et de ressources ( getrusage (2)) |
En plus de la pile, POSIX.1 indique que plusieurs autres attributs sont distincts pour chaque thread, dont les suivants :
|
- |
identifiant de thread (le type de donnée pthread_t ) |
|||
|
- |
masque de signaux ( pthread_sigmask (3)) |
|||
|
- |
la variable errno |
|||
|
- |
pile de signaux spécifique ( sigaltstack (2)) |
|||
|
- |
politique et prioritĂ© dâordonnancement temps rĂ©el ( sched (7)) |
Les caractéristiques spécifiques à Linux suivantes sont également distinctes pour chaque thread :
|
- |
capacités (consultez capabilities (7)) |
|||
|
- |
affinité CPU ( sched_setaffinity (2)) |
Valeurs de retour des fonctions pthreads
La plupart des fonctions pthreads renvoient ÌŁ 0 en cas de succĂšs et un numĂ©ro dâerreur en cas dâĂ©chec. Les numĂ©ros dâerreur pouvant ĂȘtre renvoyĂ©s ont la mĂȘme signification que ceux renvoyĂ©s dans errno par les appels systĂšme conventionnels et les fonctions de la bibliothĂšque C. Notez que les fonctions pthreads ne positionnent pas errno . Pour chacune des fonctions pthreads qui peuvent produire une erreur, POSIX.1-2001 spĂ©cifie que la fonction ne peut pas Ă©chouer avec lâerreur EINTR .
Identifiants de thread
Chacun des threads dâun processus a un unique identifiant de thread (stockĂ© dans le type pthread_t ). Cet identifiant est renvoyĂ© Ă lâappelant de pthread_create (3) et un thread peut obtenir son propre identifiant de thread en utilisant pthread_self (3).
Les identifiants de threads ne sont garantis dâĂȘtre uniques quâĂ lâintĂ©rieur dâun processus. Dans toutes les fonctions pthreads qui acceptent un identifiant de thread comme argument, par dĂ©finition, cet identifiant fait rĂ©fĂ©rence Ă un thread dans le mĂȘme processus que celui de lâappelant.
Le systĂšme peut rĂ©utiliser un identifiant de thread aprĂšs quâun thread qui sâest terminĂ© a Ă©tĂ© rejoint ou quâun thread dĂ©tachĂ© se soit terminĂ©. POSIX prĂ©cise : « Si une application essaie dâutiliser un identifiant de thread dont la durĂ©e de vie est dĂ©passĂ©e, le comportement est indĂ©fini. ».
Fonctions sûres du point de vue des threads
Une fonction sĂ»re du point de vue des threads est une fonction qui peut ĂȘtre appelĂ©e en toute sĂ»retĂ© (câest-Ă -dire quâelle renverra le mĂȘme rĂ©sultat dâoĂč quâelle soit appelĂ©e) par plusieurs threads en mĂȘme temps.
POSIX.1-2001 et POSIX.1-2008 exigent que toutes les fonctions indiquées dans la norme soient sûres du point de vue des threads, exceptées les fonctions suivantes :
asctime()
basename()
catgets()
crypt()
ctermid() avec un paramĂštre non 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 uniquement (fonction supprimée
dans POSIX.1-2008)]
encrypt()
endgrent()
endpwent()
endutxent()
fcvt() [POSIX.1-2001 uniquement (fonction supprimée
dans POSIX.1-2008)]
ftw()
gcvt() [POSIX.1-2001 uniquement (fonction supprimée
dans POSIX.1-2008)]
getc_unlocked()
getchar_unlocked()
getdate()
getenv()
getgrent()
getgrgid()
getgrnam()
gethostbyaddr() [POSIX.1-2001 uniquement (fonction
supprimée dans
POSIX.1-2008)]
gethostbyname() [POSIX.1-2001 uniquement (fonction
supprimée dans
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() [Ajoutée dans POSIX.1-2008]
strtok()
system() [Ajoutée dans POSIX.1-2008]
tmpnam() avec un paramĂštre non NULL
ttyname()
unsetenv()
wcrtomb() si son dernier paramĂštre est NULL
wcsrtombs() si son dernier paramĂštre est NULL
wcstombs()
wctomb()
Fonctions pour annulations sûres asynchrones
Une fonction pour annulations sĂ»res asynchrones peut ĂȘtre appelĂ©e sans risque dans une application oĂč lâannulation asynchrone est activĂ©e (consultez pthread_setcancelstate (3)).
POSIX.1-2001 et POSIX.1-2008 exigent que seules les fonctions suivantes soient pour annulations sûres asynchrones :
pthread_cancel()
pthread_setcancelstate()
pthread_setcanceltype()
Points dâannulation
POSIX.1 spĂ©cifie que certaines fonctions doivent, et certaines autres fonctions peuvent, ĂȘtre des points dâannulation. Si un thread est annulable, que son type dâannulation est diffĂ©rĂ© (« deferred ») et quâune demande dâannulation est en cours pour ce thread, alors le thread est annulĂ© quand il appelle une fonction qui est un point dâannulation.
POSIX.1-2001 et/ou POSIX.1-2008 exigent que les fonctions suivantes soient des points dâannulation :
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() [Ajoutée dans 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 seulement (déplacée
dans la liste « may » dans
POSIX.1-2008)]
sigsuspend()
sigtimedwait()
sigwait()
sigwaitinfo()
sleep()
system()
tcdrain()
usleep() [POSIX.1-2001 seulement(fonction retirée
dans POSIX.1-2008)]
wait()
waitid()
waitpid()
write()
writev()
POSIX.1-2001 et/ou POSIX.1-2008 indiquent que les fonctions suivantes peuvent ĂȘtre des points dâannulation :
access()
asctime()
asctime_r()
catclose()
catgets()
catopen()
chmod() [Ajoutée dans POSIX.1-2008]
chown() [Ajoutée dans POSIX.1-2008]
closedir()
closelog()
ctermid()
ctime()
ctime_r()
dbm_close()
dbm_delete()
dbm_fetch()
dbm_nextkey()
dbm_open()
dbm_store()
dlclose()
dlopen()
dprintf() [Ajoutée dans POSIX.1-2008]
endgrent()
endhostent()
endnetent()
endprotoent()
endpwent()
endservent()
endutxent()
faccessat() [Ajoutée dans POSIX.1-2008]
fchmod() [Ajoutée dans POSIX.1-2008]
fchmodat() [Ajoutée dans POSIX.1-2008]
fchown() [Ajoutée dans POSIX.1-2008]
fchownat() [Ajoutée dans POSIX.1-2008]
fclose()
fcntl() (pour nâimporte quelle valeur de
lâargument de commande)
fflush()
fgetc()
fgetpos()
fgets()
fgetwc()
fgetws()
fmtmsg()
fopen()
fpathconf()
fprintf()
fputc()
fputs()
fputwc()
fputws()
fread()
freopen()
fscanf()
fseek()
fseeko()
fsetpos()
fstat()
fstatat() [Ajoutée dans POSIX.1-2008]
ftell()
ftello()
ftw()
futimens() [Ajoutée dans POSIX.1-2008]
fwprintf()
fwrite()
fwscanf()
getaddrinfo()
getc()
getc_unlocked()
getchar()
getchar_unlocked()
getcwd()
getdate()
getdelim() [Ajoutée dans POSIX.1-2008]
getgrent()
getgrgid()
getgrgid_r()
getgrnam()
getgrnam_r()
gethostbyaddr() [POSIX.1-2001 seulement (fonction
retirée dans
POSIX.1-2008)]
gethostbyname() [POSIX.1-2001 seulement (fonction
retirée dans
POSIX.1-2008)]
gethostent()
gethostid()
gethostname()
getline() [Ajoutée dans POSIX.1-2008]
getlogin()
getlogin_r()
getnameinfo()
getnetbyaddr()
getnetbyname()
getnetent()
getopt() (si opterr est différent de zéro)
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwnam_r()
getpwuid()
getpwuid_r()
gets()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
getwc()
getwchar()
getwd() [POSIX.1-2001 seulement (fonction retirée
dans POSIX.1-2008)]
glob()
iconv_close()
iconv_open()
ioctl()
link()
linkat() [Ajoutée dans POSIX.1-2008]
lio_listio() [Ajoutée dans POSIX.1-2008]
localtime()
localtime_r()
lockf() [Ajoutée dans POSIX.1-2008]
lseek()
lstat()
mkdir() [Ajoutée dans POSIX.1-2008]
mkdirat() [Ajoutée dans POSIX.1-2008]
mkdtemp() [Ajoutée dans POSIX.1-2008]
mkfifo() [Ajoutée dans POSIX.1-2008]
mkfifoat() [Ajoutée dans POSIX.1-2008]
mknod() [Ajoutée dans POSIX.1-2008]
mknodat() [Ajoutée dans 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() [Ajoutée dans POSIX.1-2008]
psignal() [Ajoutée dans 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() [Ajoutée dans POSIX.1-2008]
readlinkat() [Ajoutée dans POSIX.1-2008]
remove()
rename()
renameat() [Ajoutée dans POSIX.1-2008]
rewind()
rewinddir()
scandir() [Ajoutée dans POSIX.1-2008]
scanf()
seekdir()
semop()
setgrent()
sethostent()
setnetent()
setprotoent()
setpwent()
setservent()
setutxent()
sigpause() [Ajoutée dans POSIX.1-2008]
stat()
strerror()
strerror_r()
strftime()
symlink()
symlinkat() [Ajoutée dans POSIX.1-2008]
sync()
syslog()
tmpfile()
tmpnam()
ttyname()
ttyname_r()
tzset()
ungetc()
ungetwc()
unlink()
unlinkat() [Ajoutée dans POSIX.1-2008]
utime() [Ajoutée dans POSIX.1-2008]
utimensat() [Ajoutée dans POSIX.1-2008]
utimes() [Ajoutée dans POSIX.1-2008]
vdprintf() [Ajoutée dans POSIX.1-2008]
vfprintf()
vfwprintf()
vprintf()
vwprintf()
wcsftime()
wordexp()
wprintf()
wscanf()
Une implĂ©mentation peut Ă©galement indiquer dâautres fonctions non spĂ©cifiĂ©es dans la norme comme Ă©tant des points dâannulation. En particulier, une implĂ©mentation marquera probablement toute fonction non standard qui peut bloquer comme Ă©tant un point dâannulation (cela inclut la plupart des fonctions qui peuvent modifier des fichiers).
Il est Ă remarquer que mĂȘme si une application nâutilise pas dâannulation asynchrone, lâappel dâune fonction de la liste ci-dessus Ă partir dâun gestionnaire de signal asynchrone peut provoquer lâĂ©quivalent dâune annulation asynchrone. Le code sous-jacent de lâutilisateur peut ne pas sâattendre Ă une annulation asynchrone et lâĂ©tat des donnĂ©es de lâutilisateur peut devenir incohĂ©rent. Par consĂ©quent, les signaux doivent ĂȘtre utilisĂ©s avec prĂ©caution lors de lâentrĂ©e dans une rĂ©gion dâannulation diffĂ©rĂ©e.
Compiler sous Linux
Sous Linux, les programmes utilisant lâAPI pthreads doivent ĂȘtre compilĂ©s avec cc -pthread .
Implémentations des threads POSIX sous Linux
Deux
implémentations différentes des threads ont
été fournies par la bibliothÚque C
de GNU sous Linux :
LinuxThreads
Il sâagit de lâimplĂ©mentation des Pthreads originelle. Depuis la glibc 2.4, cette implĂ©mentation nâest plus prise en charge.
NPTL (Native POSIX Threads Library)
Il sâagit de lâimplĂ©mentation moderne des Pthreads. Par rapport Ă LinuxThreads, NPTL se conforme mieux aux exigences de la norme POSIX.1 et fournit une meilleure performance lors de la crĂ©ation dâun grand nombre de threads. NPTL est disponible depuis la glibc 2.3.2 et nĂ©cessite des fonctionnalitĂ©s prĂ©sentes dans le noyau Linux 2.6.
Ces deux implĂ©mentation sont dit de type 1:1, ce qui veut dire que chaque thread correspond Ă une entitĂ© dâordonnancement du noyau. Les deux implĂ©mentations utilisent lâappel systĂšme clone (2) de Linux. Dans NPTL, les primitives de synchronisation de threads (mutexes, jonction de thread, etc.) sont implĂ©mentĂ©es avec lâappel systĂšme futex (2) de Linux.
LinuxThreads
Les fonctionnalités importantes de cette implémentation sont les suivantes :
|
- |
En plus du thread principal (initial) et des threads créés par le programme avec pthread_create (3), lâimplĂ©mentation crĂ©e un thread de gestion. Ce thread sâoccupe de la crĂ©ation et de la terminaison des threads. Des problĂšmes peuvent survenir si ce thread est tuĂ© de façon imprĂ©vue. |
||
|
- |
Les signaux sont utilisĂ©s en interne par lâimplĂ©mentation. Sous Linux 2.2 et suivants, les trois premiers signaux temps rĂ©el sont utilisĂ©s (voir aussi signal (7)). Sous les noyaux plus anciens, LinuxThreads utilise SIGUSR1 et SIGUSR2 . Les applications doivent Ă©viter dâutiliser un jeu de signaux utilisĂ© par lâimplĂ©mentation. |
||
|
- |
Les threads ne partagent pas leur identifiant de processus. (En fait, les threads LinuxThreads sont implĂ©mentĂ©s comme des processus partageant plus dâinformations quâĂ lâhabitude, mais pas leur identifiant de processus.) Les threads LinuxThreads (y compris le thread de gestion) sont visibles comme des processus diffĂ©rents avec ps (1). |
LâimplĂ©mentation LinuxThreads sâĂ©carte de la spĂ©cification POSIX.1 par plusieurs aspects, dont les suivants :
|
- |
Les appels Ă getpid (2) renvoient une valeur distincte dans chaque thread. |
||
|
- |
Les appels Ă getppid (2) dans les threads autres que le thread principal renvoient lâidentifiant de processus du thread de gestion ; Ă la place, getppid (2) dans ces threads renvoie la mĂȘme valeur que getppid (2) dans le thread principal. |
||
|
- |
Lorsquâun thread crĂ©e un nouveau processus enfant avec fork (2), nâimporte quel thread doit pouvoir utiliser wait (2) sur lâenfant. Cependant, lâimplĂ©mentation ne permet quâau thread ayant créé lâenfant dâappeler wait (2) sur lui. |
||
|
- |
Lorsquâun thread appelle execve (2), tous les autres threads sont terminĂ©s (comme le prescrit POSIX.1). Cependant, le processus rĂ©sultant a le mĂȘme PID que le thread ayant appelĂ© execve (2) : il doit avoir le mĂȘme PID que le thread principal. |
||
|
- |
Les threads ne partagent pas leurs identifiants dâutilisateur et de groupe. Cela peut causer des complications pour les programmes set-user-ID et provoquer des erreurs dans les fonctions pthreads si une application change dâidentifiant avec seteuid (2) et consorts. |
||
|
- |
Les threads ne partagent pas lâidentifiant de session et de groupe de processus. |
||
|
- |
Les threads ne partagent pas les verrouillages dâenregistrement créés avec fcntl (2). |
||
|
- |
Lâinformation renvoyĂ©e par times (2) et getrusage (2) est par thread au lieu dâĂȘtre par processus. |
||
|
- |
Les threads ne partagent pas les valeurs « undo » de sémaphore (voir semop (2)). |
||
|
- |
Les threads ne partagent pas les temporisations dâintervalle. |
||
|
- |
Les threads ne partagent pas leur valeur de politesse. |
||
|
- |
POSIX.1 distingue les notions de signal envoyĂ© au processus dans son ensemble et de signal envoyĂ© Ă un thread individuellement. Selon POSIX.1, un signal envoyĂ© au processus (par exemple avec kill (2)) sera gĂ©rĂ© par un thread choisi arbitrairement au sein du processus. LinuxThreads ne permet pas dâenvoyer un signal au processus, mais seulement Ă un thread spĂ©cifique. |
||
|
- |
Les threads ont des paramĂštres de pile de signaux spĂ©cifique distincts. Cependant, les paramĂštres de pile spĂ©cifique dâun nouveau thread sont copiĂ©s Ă partir du thread qui lâa créé, ce qui veut dire que les threads partagent initialement une mĂȘme pile de signaux spĂ©cifique. (Un nouveau thread devrait dĂ©marrer sans pile de signaux spĂ©cifique. Si deux threads gĂšrent un signal sur leur pile spĂ©cifique au mĂȘme moment, des Ă©checs imprĂ©visibles du programme risquent de se produire.) |
NPTL
Avec NPTL, tous les threads dâun processus sont placĂ©s dans le mĂȘme groupe de threads. Tous les membres dâun groupe de threads partagent le mĂȘme PID. NPTL nâutilise pas de thread de gestion.
NPTL utilise en interne les deux premiers signaux temps rĂ©el. Ces signaux ne peuvent pas ĂȘtre utilisĂ©s dans les applications. Consulter nptl (7) pour davantage de dĂ©tails.
NPTL a encore au moins une non conformité à POSIX.1 :
|
- |
Les threads ne partagent pas leur valeur de politesse. |
Certaines non conformitĂ©s nâapparaissent quâavec des noyaux plus anciens :
|
- |
lâinformation renvoyĂ©e par times (2) et getrusage (2) est par thread au lieu dâĂȘtre globale au processus (corrigĂ© dans Linux 2.6.9) ; |
||
|
- |
les threads ne partagent pas les limites de ressources (corrigé dans Linux 2.6.10) ; |
||
|
- |
les threads ne partagent pas les temporisations dâintervalle (corrigĂ© dans Linux 2.6.12) ; |
||
|
- |
seul le thread principal est autorisé à démarrer une nouvelle session avec setsid (2) (corrigé dans le noyau 2.6.16) ; |
||
|
- |
seul le thread principal est autorisé à rendre le processus leader de son groupe de processus avec setpgid (2) (corrigé dans le noyau 2.6.16) ; |
||
|
- |
Les threads ont des paramĂštres de pile de signaux spĂ©cifique distincts. Cependant, les paramĂštres de pile de signaux spĂ©cifique dâun nouveau thread sont copiĂ©s de ceux du thread qui lâa créé, de façon que les threads partagent initialement une pile de signaux spĂ©cifique dans Linux 2.6.16). |
Veuillez noter les points suivants Ă propos de lâimplĂ©mentation NPTL :
|
- |
Si la limite souple de taille de pile (voir dans setrlimit (2) la description de RLIMIT_STACK ) est diffĂ©rente de unlimited , cette valeur dĂ©termine la taille de pile par dĂ©faut pour les nouveaux threads. Pour avoir un effet, cette limite doit ĂȘtre dĂ©finie avant le dĂ©marrage du programme, par exemple en utilisant la commande ulimit -s de lâinterprĂ©teur de commandes ( limit stacksize dans csh). |
DĂ©terminer lâimplĂ©mentation des threads utilisĂ©e
Depuis glibc 2.3.2, la commande getconf (1) peut ĂȘtre utilisĂ©e pour dĂ©terminer lâimplĂ©mentation de threads du systĂšme, par exemple :
bash$ getconf
GNU_LIBPTHREAD_VERSION
NPTL 2.3.4
Avec des versions plus anciennes de la glibc, une commande comme la suivante devrait ĂȘtre suffisante pour dĂ©terminer lâimplĂ©mentation de threads par dĂ©faut :
bash$ $( ldd
/bin/ls | grep libc.so | awk '{print $3}' ) | \
egrep -i 'threads|nptl'
Native POSIX Threads Library by Ulrich Drepper et al
Choisir lâimplĂ©mentation des threads : LD_ASSUME_KERNEL
Sur les systĂšmes avec une glibc fournissant Ă la fois LinuxThreads et NPTL (i.e. glibc 2.3. x ), la variable dâenvironnement LD_ASSUME_KERNEL peut ĂȘtre utilisĂ©e pour Ă©craser le choix par dĂ©faut dâimplĂ©mentation de threads fait par lâĂ©diteur de liens dynamiques. Cette variable indique Ă lâĂ©diteur de liens dynamiques quâil doit faire comme sâil Ă©tait exĂ©cutĂ© avec une version particuliĂšre du noyau. En indiquant une version du noyau ne fournissant pas les fonctionnalitĂ©s nĂ©cessitĂ©es par NPTL, on peut forcer lâutilisation de LinuxThreads. (La raison la plus probable pour cela est dâexĂ©cuter une application (boguĂ©e) qui dĂ©pend dâun comportement de LinuxThreads non conforme Ă la spĂ©cification.) Par exemple :
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
VOIR AUSSI
clone (2), fork (2), futex (2), gettid (2), proc (5), attributes (7), futex (7), nptl (7), sigevent (3type), signal (7)
Diverses pages de manuel de Pthreads, par exemple : 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) et pthread_testcancel (3)
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter Ă la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il nây a aucune RESPONSABILITĂ LĂGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .