Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Operacja uzyskuje semantykę, jeśli inne procesory zawsze będą widzieć jej efekt przed każdą kolejną operacją. Operacja ma semantykę wydania jeśli inne procesory zobaczą efekt każdej poprzedniej operacji przed efektem samej operacji.
Rozważmy następujący przykład kodu:
a++;
b++;
c++;
Z punktu widzenia innego procesora powyższe operacje mogą występować w dowolnej kolejności. Na przykład inny procesor może zobaczyć przyrost b przed przyrostem a.
Operacje atomowe, takie jak te, które wykonują funkcje Interlocked Xxx, mają domyślnie semantykę akwizycji i zwalniania. Jednak procesory oparte na Itanium wykonują operacje, które mają tylko semantykę pozyskiwania lub tylko zwalniania szybciej niż te, które mają oba. W związku z tym system zapewnia InterlockedXxxAcquire i InterlockedXxxRelease wersje niektórych InterlockedXxx procedur.
Na przykład procedura InterlockedIncrementAcquire używa semantyki pozyskiwania, aby zwiększyć zmienną. W przypadku ponownego zapisania poprzedniego przykładu kodu w następujący sposób:
InterlockedIncrementAcquire(&a);
b++;
c++;
inne procesory zawsze będą widzieć przyrost a przed przyrostami b i c.
Podobnie rutyna InterlockedIncrementRelease używa semantyki uwalniania do inkrementacji zmiennej. Jeśli ponownie napiszesz przykład kodu, w następujący sposób:
a++;
b++;
InterlockedIncrementRelease(&c);
inne procesory zawsze będą widzieć inkrementacje a i b przed inkrementacją c.
Jeśli procesor nie udostępnia instrukcji, które mają tylko semantykę uzyskiwania lub tylko zwalniania, system użyje odpowiedniej procedury, która zapewnia oba typy semantyk. Na przykład w przypadku procesorów x86 zarówno InterlockedIncrementAcquire , jak i InterlockedIncrementRelease są równoważne interlockedIncrement.
W poniższej tabeli wymieniono procedury, które mają warianty tylko do uzyskania i wydania.
| InterlockedXxx Rutyna | Pobierz — wersjaSemantics-Only | Wydanie - wersjaSemantics-Only |
|---|---|---|