Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma operação adquiriu semântica se outros processadores sempre verão seu efeito antes do efeito de qualquer operação subsequente. Uma operação tem semântica de liberação se outros processadores verão o efeito de cada operação anterior antes do efeito da operação em si.
Considere o seguinte exemplo de código:
a++;
b++;
c++;
Do ponto de vista de outro processador, as operações anteriores podem parecer ocorrer em qualquer ordem. Por exemplo, o outro processador pode ver o incremento de a antes do incremento de b.
As operações atómicas, como aquelas que as rotinas Interlocked Xxx executam, têm, por padrão, semântica de aquisição e libertação. No entanto, os processadores baseados em Itanium executam operações que têm apenas semântica de aquisição ou de libertação mais rapidamente do que aquelas que têm ambas. Portanto, o sistema fornece versões InterlockedXxxAcquire e InterlockedXxxRelease de algumas das rotinas InterlockedXxx.
Por exemplo, a rotina InterlockedIncrementAcquire usa a semântica de aquisição para incrementar uma variável. Se você reescreveu o exemplo de código anterior da seguinte maneira:
InterlockedIncrementAcquire(&a);
b++;
c++;
outros processadores sempre veriam o incremento de a antes dos incrementos de b e c.
Da mesma forma, a rotina InterlockedIncrementRelease usa semântica de liberação para incrementar uma variável. Se você reescreveu o exemplo de código mais uma vez, da seguinte maneira:
a++;
b++;
InterlockedIncrementRelease(&c);
outros processadores sempre veriam os incrementos de a e b antes do incremento de c.
Se o processador não fornecer instruções que tenham apenas adquirido ou liberado semântica, o sistema usará a rotina correspondente que fornece ambos os tipos de semântica. Por exemplo, em processadores x86, InterlockedIncrementAcquire e InterlockedIncrementRelease são equivalentes a InterlockedIncrement.
A tabela a seguir lista as rotinas que têm variantes somente de aquisição e somente de lançamento.
| RotinaXxx Interlocked | Adquirir - VersãoSemantics-Only | VersãoSemantics-Only |
|---|---|---|