Sammanflätad variabelåtkomst
Program måste synkronisera åtkomst till variabler som delas av flera trådar. Program måste också se till att åtgärder på dessa variabler utförs atomiskt (utförs i sin helhet eller inte alls.)
Enkla läsningar och skrivningar till korrekt justerade 32-bitarsvariabler är atomiska åtgärder. Med andra ord får du inte bara en del av variabeln uppdaterad. alla bitar uppdateras på ett atomiskt sätt. Åtkomsten är dock inte garanterad att synkroniseras. Om två trådar läser och skriver från samma variabel kan du inte avgöra om en tråd utför läsåtgärden innan den andra utför sin skrivåtgärd.
Enkla läsningar och skrivningar till korrekt justerade 64-bitarsvariabler är atomiska i 64-bitars Windows. Läsningar och skrivningar till 64-bitarsvärden garanteras inte vara atomiska i 32-bitars Windows. Läsningar och skrivningar till variabler av andra storlekar garanteras inte vara atomiska på någon plattform.
Det sammankopplade API:et
De sammankopplade funktionerna ger en enkel mekanism för att synkronisera åtkomsten till en variabel som delas av flera trådar. De utför också åtgärder på variabler på ett atomiskt sätt. Trådarna i olika processer kan använda dessa funktioner om variabeln finns i delat minne.
Funktionerna InterlockedIncrement och InterlockedDecrement kombinerar stegen för att öka eller minska en variabel till en atomisk åtgärd. Den här funktionen är användbar i ett operativsystem med flera funktioner, där systemet kan avbryta en tråds körning för att bevilja en del processortid till en annan tråd. Utan sådan synkronisering kan två trådar läsa samma värde, öka det med 1 och lagra det nya värdet för en total ökning på 1 i stället för 2. De sammankopplade funktionerna för variabel åtkomst skyddar mot den här typen av fel.
Funktionerna InterlockedExchange och InterlockedExchangePointer atomiskt utväxlar värdena för de angivna variablerna. Funktionen InterlockedExchangeAdd kombinerar två åtgärder: att lägga till två variabler och lagra resultatet i en av variablerna.
InterlockedCompareExchange, InterlockedCompare64Exchange128och InterlockedCompareExchangePointer funktioner kombinerar två åtgärder: jämföra två värden och lagra ett tredje värde i en av variablerna, baserat på resultatet av jämförelsen.
funktionerna InterlockedAnd, InterlockedOroch InterlockedXor atomiskt utför åtgärder för AND, OR respektive XOR.
Det finns funktioner som är särskilt utformade för att utföra sammanflätad variabelåtkomst på 64-bitars minnesvärden och adresser och som är optimerade för användning i 64-bitars Windows. Var och en av dessa funktioner innehåller "64" i namnet; till exempel InterlockedDecrement64 och InterlockedCompareExchangeAcquire64.
De flesta av de sammankopplade funktionerna ger fullständiga minnesbarriärer på alla Windows-plattformar. Det finns också funktioner som kombinerar de grundläggande sammanflätade variabelåtkomståtgärderna med semantiken hämta och frigöra minnesordning som stöds av vissa processorer. Var och en av dessa funktioner innehåller ordet "Hämta" eller "Release" i sina namn. till exempel InterlockedDecrementAcquire och InterlockedDecrementRelease. Hämta minnessemantik anger att minnesåtgärden som utförs av den aktuella tråden ska visas innan andra minnesåtgärder görs. Versionsminnessemantik anger att minnesåtgärden som utförs av den aktuella tråden ska visas när alla andra minnesåtgärder har slutförts. Med dessa semantik kan du tvinga minnesåtgärder att utföras i en viss ordning. Använd hämta semantik när du anger en skyddad region och släpper semantik när du lämnar den.
Relaterade ämnen