Trådsynkronisering er en mekanisme, hvor flere samtidige tråde styres til at udføre en kritisk sektion på en serialiseret måde, hvilket sikrer datakonsistens og forhindrer dataløb. Det garanterer ordnet udførelse af tråde, hvilket forhindrer forekomsten af uventet systemadfærd på grund af konflikter i adgang til delte ressourcer.
Kritisk afsnit:
En kritisk sektion er et delt stykke kode eller data, som kun skal tilgås af én tråd ad gangen. Flere tråde, der får adgang til en kritisk sektion samtidigt, kan forårsage datakorruption og uforudsigelig adfærd.
Synkroniseringsprimitiver:
For at synkronisere trådadgang til kritiske sektioner bruges forskellige synkroniseringsprimitiver:
- mutexes (gensidige udelukkelseslåse):En mutex bruges til at låse en delt ressource, så kun én tråd får adgang til den kritiske sektion ad gangen. Tråde, der forsøger at få adgang til en låst ressource, blokeres, indtil mutex'et bliver låst op.
- semaforer:En semafor er en variabel, der bruges til at kontrollere adgangen til delte ressourcer. Den indeholder et ikke-negativt heltal, der angiver antallet af tilgængelige ressourcer. Tråde formindsker semaforen, før de får adgang til ressourcer, og øger den, når den er færdig.
- Betingelsesvariable:Betingelsesvariabler bruges sammen med mutexes til at styre tråde, der venter på, at specifikke hændelser eller betingelser opstår, før du fortsætter. Tråde bruger betingelsesvariable til at vente, indtil en bestemt betingelse er opfyldt, og fortsætter derefter med deres udførelse.
- Atomvariable:Atomvariable giver trådsikre operationer på variabler. De sikrer, at alle tråde, der får adgang til variablen, ser den samme værdi på samme tid.
- barrierer:Barrierer er synkroniseringspunkter, hvor tråde venter på, at alle tråde når et bestemt punkt i koden, før de går videre.
Trådsynkronisering har til formål at sikre, at delte ressourcer tilgås på en kontrolleret måde, hvilket forhindrer løbsforhold og datakorruption og garanterer ensartet systemadfærd.