Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
En åtgärd har hämta semantik om andra processorer alltid ser dess effekt före någon efterföljande åtgärds effekt. En åtgärd har release-semantik om andra processorer ser effekten av varje föregående åtgärd före effekten av åtgärden själv.
Tänk dig följande kodexempel:
a++;
b++;
c++;
Från en annan processors synvinkel kan de föregående åtgärderna verka ske i valfri ordning. Den andra processorn kan till exempel se inkrementet b innan a.
Atomiska operationer, såsom de som InterlockedXxx rutiner utför, har både hämtnings- och frigivningssemantik som standard. Itanium-baserade processorer kör dock operationer med endast hämta- eller släppsemantik snabbare än de som har båda. Därför tillhandahåller systemet InterlockedXxxAcquire and InterlockedXxxRelease versioner av några av InterlockedXxx rutiner.
Till exempel InterlockedIncrementAcquire rutin använder hämta semantik för att öka en variabel. Om du skriver om föregående kodexempel på följande sätt:
InterlockedIncrementAcquire(&a);
b++;
c++;
andra processorer skulle alltid se ökningen av a före stegen för b och c.
På samma sätt använder InterlockedIncrementRelease rutin versionssemantik för att öka en variabel. Om du skriver om kodexemplet igen, enligt följande:
a++;
b++;
InterlockedIncrementRelease(&c);
andra processorer skulle alltid se ökningarna av a och b före ökningen av c.
Om processorn inte tillhandahåller instruktioner som bara har hämtat eller endast släpper semantik använder systemet motsvarande rutin som tillhandahåller båda typerna av semantik. På x86-processorer är till exempel både InterlockedIncrementAcquire och InterlockedIncrementRelease likvärdiga med InterlockedIncrement.
I följande tabell visas de rutiner som har endast hämtnings- och släppvarianter.
| Sammankoppladexxx rutin | HämtaSemantics-Only-versionen | Release –Semantics-Only version |
|---|---|---|