pthreads(7)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

pthreads(7)

POSIX-trådar

BESKRIVNING

POSIX.1 specificerar en uppsättning gränssnitt (funktioner, headerfiler) för trådbaserad programmering som ofta kallas POSIX-trådar, eller Pthreads. En enskild process kan innehålla flera trådar som alla exekverar samma program. Dessa trådar delar samma globala minne (data- och heapsegment), men varje tråd har sin egen stack (automatiska variabler).

POSIX.1 kräver också att trådar delar ett antal andra attribut (d.v.s. dessa attribut är process-vida snarare än tråd-specifika):

  • Process-ID
  • Föräldraprocess-ID
  • Processgrupps-ID och sessions-ID
  • Kontrollterminal
  • Användar- och grupp-ID
  • Öppna filbeskrivare
  • Låser (se fcntl(2))
  • Signaldestinationer
  • Mask för filskaparättigheter (umask(2))
  • Aktuell katalog (chdir(2)) och rotdir (chroot(2))
  • Intervalltimers (setitimer(2)) och POSIX-timers (timer_create(2))
  • Nice-värde (setpriority(2))
  • Resursgränser (setrlimit(2))
  • Mätning av förbrukning av CPU-tid (times(2)) och resurser (getrusage(2))

Utöver stacken specificerar POSIX.1 att flera andra attribut är unika för varje tråd, inklusive:

  • Tråd-ID (datatypen pthread_t)
  • Signalmask (pthread_sigmask(3))
  • Variabeln errno
  • Alternativ signalstack (sigaltstack(2))
  • Realtidsschemaläggningspolicy och prioritet (sched(7))

De följande Linux-specifika funktionerna är också per-tråd:

  • Kapabiliteter (se capabilities(7))
  • CPU-affinitet (sched_setaffinity(2))

RETURNERINGSVÄRDEN FÖR PTHREADS-FUNKTIONER

De flesta Pthreads-funktioner returnerar 0 vid framgång och ett felnummer vid fel. Felnummer som returneras har samma betydelse som de felnummer som anges i errno för vanliga systemanrop och C-biblioteksfunktioner. Observera att Pthreads-funktioner inte sätter errno.

TRÅD-ID

Varje tråd i en process har ett unikt tråd-ID (lagrat i typen pthread_t). Detta ID returneras till anroparen av pthread_create(3), och en tråd kan hämta sitt eget ID med pthread_self(3).

Tråd-ID:n är unika endast inom en process. (I alla Pthreads-funktioner som accepterar ett tråd-ID som argument hänvisar detta ID per definition till en tråd i samma process som anroparen.)

TRÅDSÄKRA FUNKTIONER

En trådsäker funktion är en som kan anropas samtidigt från flera trådar utan risk för oväntade resultat.

POSIX.1-2001 och POSIX.1-2008 kräver att alla funktioner i standarden ska vara trådsäkra, med undantag för vissa funktioner, som till exempel:

  • `asctime()`
  • `basename()`
  • `catgets()`
  • `crypt()`
  • `ctime()`
  • `getenv()`
  • `rand()`
  • `strerror()`
  • `strtok()`
  • ... och fler.

PTHREADS I LINUX

Linux erbjuder två implementeringar av POSIX-trådar:

  • **LinuxThreads**: Ursprunglig implementation, ej längre stödd sedan glibc 2.4.
  • **NPTL (Native POSIX Threads Library)**: Modern implementation, bättre överensstämmelse med POSIX.1 och högre prestanda.

KOMPILERING I LINUX

På Linux bör program som använder Pthreads-API kompileras med: `cc -pthread`.

EXEMPEL

Se olika manualer för funktioner som `pthread_create(3)`, `pthread_mutex_lock(3)`, `pthread_cond_wait(3)` och `pthread_join(3)` för att få specifika exempel.

SE ÄVEN

COLOFON

Denna sida är del av man-pages-projektet (Linux kärna och C-bibliotekets användargränssnitt). För mer information, se [1]. Rapportera buggar till [2].

Linux man-pages 6.9.1 (2024-06-15)

SIDOR SOM HÄNVISAR TILL DENNA SIDA

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man7/pthreads.7.html


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.