Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operace získala sémantiku , pokud ostatní procesory vždy uvidí jeho účinek před jakýmkoli následným účinkem operace. Operace má sémantiku uvolnění , pokud ostatní procesory uvidí před efektem samotné operace všechny předchozí operace.
Vezměme si následující příklad kódu:
a++;
b++;
c++;
Z pohledu jiného procesoru se může zobrazit předchozí operace v libovolném pořadí. Například druhý procesor může vidět přírůstek b
před přírůstkem a
.
Atomické operace, jako ty, které provádějí rutiny InterlockedXxx, mají ve výchozím nastavení sémantiku získání i uvolnění. Procesory založené na architektuře Itanium však provádějí operace, které mají pouze získávací nebo uvolňovací sémantiku, rychleji než ty, které mají obojí. Systém proto poskytuje verze InterlockedXxxAcquire a InterlockedXxxRelease některých rutin InterlockedXxx.
Například rutina InterlockedIncrementAcquire používá sémantiku při získání ke zvýšení proměnné. Pokud přepíšete předchozí příklad kódu následujícím způsobem:
InterlockedIncrementAcquire(&a);
b++;
c++;
ostatní procesory by vždy viděly přírůstek a
před přírůstky b
a c
.
Podobně rutina InterlockedIncrementRelease používá sémantiku vydané verze k zvýšení proměnné. Pokud znovu přepíšete příklad kódu, postupujte takto:
a++;
b++;
InterlockedIncrementRelease(&c);
ostatní procesory by vždy viděly přírůstky a
a b
před přírůstkem c
.
Pokud procesor neposkytuje instrukce, které mají pouze sémantiku načtení nebo pouze sémantiku uvolnění, systém použije odpovídající rutinu, která poskytuje oba typy sémantiky. Například na procesorech x86 jsou interlockedIncrementAcquire i InterlockedIncrementRelease ekvivalentní interlockedIncrementu.
Následující tabulka uvádí rutiny, které mají varianty pouze pro získání a vydání.
ZamknutáXxx Procedura | Získání: VerzeSemantics-Only | Verze –Semantics-Only verze |
---|---|---|
InterlockedDecrement InterlockedDecrement |
||