Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een bewerking heeft acquisitiesemantiek als andere processors het effect ervan altijd zullen zien voordat het effect van een volgende bewerking zichtbaar is. Een bewerking heeft semantiek vrijgeven als andere processors het effect van elke voorgaande bewerking vóór het effect van de bewerking zelf zien.
Bekijk het volgende codevoorbeeld:
a++;
b++;
c++;
Vanuit het oogpunt van een andere processor kunnen de voorgaande bewerkingen in elke volgorde voorkomen. De andere processor kan bijvoorbeeld de toename van b zien vóór de verhoging van a.
Atomische bewerkingen, zoals die uitgevoerd door de InterlockedXxx-routines, hebben standaard acquire- en release-semantiek. Itanium-gebaseerde processors voeren echter bewerkingen die alleen acquisitiesemantiek of alleen vrijgevingssemantiek hebben sneller uit dan die met beide. Daarom biedt het systeem InterlockedXxxAcquire en InterlockedXxxRelease versies van sommige van de InterlockedXxx routines.
De InterlockedIncrementAcquire routine gebruikt verwervingssemantiek om een variabele te verhogen. Als u het voorgaande codevoorbeeld als volgt herschreven:
InterlockedIncrementAcquire(&a);
b++;
c++;
andere processors zouden altijd de incremente van a zien voordat de incremente van b en cplaatsvinden.
Op dezelfde manier maakt de InterlockedIncrementRelease- routine gebruik van semantiek van release om een variabele te verhogen. Als u het codevoorbeeld opnieuw herschreven, gaat u als volgt te werk:
a++;
b++;
InterlockedIncrementRelease(&c);
andere processors zouden altijd de verhogingen van a en b zien vóór de verhoging van c.
Als de processor geen instructies bevat die alleen semantiek verkrijgen of vrijgeven, gebruikt het systeem de bijbehorende routine die beide typen semantiek biedt. Op x86-processors zijn bijvoorbeeld zowel InterlockedIncrementAcquire als InterlockedIncrementRelease- gelijk aan InterlockedIncrement.
De volgende tabel bevat de routines met alleen-verkrijg en alleen-vrijgeven varianten.
| IngeslotenXxx Routine | Verwerven-Semantics-Only Version | Release-Semantics-Only versie |
|---|---|---|