Man page - pthreads(7)

Packages contains this manual

Available languages:

en fr ja ru

Manual

pthreads

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