CMD + K

Kapittel 9Begreper & formler · Tråder, locks og condition variables
Referanseside · Kapittel 9

Begreper & formler

Alle nøkkelbegrepene og formlene fra Tråder, locks og condition variables, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.

Øv med flashcards11 kort fra dette kapittelet

Begreper

Sentrale begreper fra kapittelet med korte definisjoner.

01Tråd

En utførelsesstrøm med egen stack og registertilstand, men som deler prosessens adresseområde med andre tråder.

02Race condition

Feil som oppstår når korrekthet avhenger av en bestemt, ukontrollert interleaving.

03Kritisk seksjon

Kode som leser eller skriver delt tilstand og derfor må beskyttes.

04Mutual exclusion

Egenskapen at høyst én tråd om gangen er inne i kritisk seksjon.

05Spin lock

Lås der ventende tråd spinner aktivt i stedet for å sove.

06Blocking lock

Lås der ventende tråd kan settes til å sove og vekkes senere.

07Condition variable

Mekanisme for å vente på at en tilstand blir sann, typisk sammen med en lås.

08Lost wakeup

Feil der et signal sendes uten at mottakeren faktisk venter riktig, slik at oppvåkningen går tapt.

Formler

Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.

counter-correct

Korrekt tellerverdi

Logg inn for forklaring

Et klassisk eksempel på race condition: uten gjensidig utelukkelse blir sluttverdien ofte lavere enn forventet.

N_tråderantall samtidige tråder
inc_pr.trådantall increment-er hver tråd kjører
wait-pattern

Ventemønster med condition variable

Logg inn for forklaring

Må være `while`, ikke `if`, fordi tråden kan vekkes uten at betingelsen faktisk er sann når den får låsen tilbake.

condpredikatet vi venter på blir sant
cvcondition variable bundet til lock
lockmutex som beskytter cond
lock-criteria

Krav til en god lås

Logg inn for forklaring

Låser må både være riktige og praktiske under ekte last.

Læringsmål

Hva du skal kunne etter å ha lest kapittelet.

  1. 01Forklare hvordan en race condition oppstår på en delt teller og hvorfor counter++ ikke er én instruksjon
  2. 02Sammenligne spinlocks og blocking locks og argumentere for når hver er riktig
  3. 03Bruke en condition variable med while-løkke og lås-disciplin for å unngå lost wakeup
  4. 04Vurdere en låseimplementasjon ut fra correctness, fairness og overhead