Home

Synchronisatieprimitieven

Synchronisatieprimitieven zijn bouwstenen in gelijktijdige programmering die het gedrag van meerdere uitvoeringsstromen (threads) of processen coördineren. Ze zorgen voor atomairheid van bewerkingen, bepalen de volgorde van gebeurtenissen en voorkomen data races en inconsistentie bij gedeelde gegevens.

Veelvoorkomende synchronisatieprimitieven zijn mutexen (mutual exclusion locks) die exclusieve toegang tot een kritieke sectie afdwingen; spinlocks

Toepassing en ontwerp: juiste toepassing impliceert het correct afhandelen van kritieke secties, het minimaliseren van de

Implementaties en voorbeelden: veel talen bieden ingebouwde ondersteuning, zoals POSIX pthread_mutex_lock, Java’s synchronized en ReentrantLock, C#’s

Kritiek en testen: correcte toepassing vereist vaak theoretische analyse of formeel bewijs; hulpmiddelen voor race- en

---

die
wachten
door
voortdurend
te
controleren;
semaforen
die
tellen
hoeveel
beschikbare
bronnen
toestaan;
monitors
die
data
en
operaties
op
een
object
bundelen
met
automatische
mutual
exclusion;
voorwaardelijke
variabelen
(condition
variables)
voor
het
wachten
op
een
conditie;
barriers
voor
synchronisatie
van
een
vast
aantal
threads;
en
read-write
locks
die
meerdere
lezers
maar
één
schrijver
toestaan.
Ook
atomische
operaties
en
geheugenbarrières
zijn
fundamenteel
voor
correcte
synchronisatie.
tijd
waarin
een
lock
vastzit
en
het
vermijden
van
deadlocks,
livelocks
en
starvation.
Vaak
wordt
aangeraden
om
de
volgorde
van
vergrendeling
vast
te
leggen,
bronnen
in
een
globale
volgorde
te
verwerven
en
minder
gedeelde
data
te
gebruiken.
lock,
en
Go’s
kanalen
en
Mutex.
Bij
hogere
programmeertalen
kunnen
synchronisatieprimitieven
worden
gebouwd
boven
een
geheugenmodel
en
runtime.
deadlock-detectie,
stress-tests
en
modelchecking
worden
gebruikt
om
fouten
op
te
sporen.