의미 체계 획득 및 해제
다른 프로세서가 후속 작업의 효과 전에 항상 효과를 볼 경우 연산에서 의미 체계를 획득 합니다. 다른 프로세서가 작업 자체의 효과 전에 이전 작업의 모든 효과를 볼 경우 작업에 릴리스 의미 체계 가 있습니다.
다음 코드 예제를 생각해보세요.
a++;
b++;
c++;
다른 프로세서의 관점에서 이전 작업은 순서에 따라 발생할 수 있습니다. 예를 들어 다른 프로세서는 의 증가 전에 의 b
증가가 a
표시될 수 있습니다.
InterlockedXxx 루틴이 수행하는 것과 같은 원자성 작업에는 기본적으로 의미 체계를 획득하고 해제합니다. 그러나 Itanium 기반 프로세서는 의미 체계를 획득하거나 둘 다 가진 프로세서보다 더 빠르게 릴리스하는 작업을 실행합니다. 따라서 시스템은 일부 인터록된 Xxx루틴의 Interlocked Xxx Acquire 및 InterlockedXxx릴리스 버전을 제공합니다.
예를 들어 InterlockedIncrementAcquire 루틴은 인수 의미 체계를 사용하여 변수를 증가합니다. 위의 코드 예제를 다음과 같이 다시 작성하는 경우:
InterlockedIncrementAcquire(&a);
b++;
c++;
다른 프로세서는 항상 및 의 증가 a
전에 의 증분을 볼 수 있습니다b
.c
마찬가지로 InterlockedIncrementRelease 루틴은 릴리스 의미 체계를 사용하여 변수를 증가합니다. 다음과 같이 코드 예제를 다시 작성하는 경우:
a++;
b++;
InterlockedIncrementRelease(&c);
다른 프로세서는 항상 증분 전 및 b
의 증 a
분을 c
볼 수 있습니다.
프로세서가 의미 체계만 획득하거나 릴리스하는 명령만 제공하지 않는 경우 시스템은 두 가지 유형의 의미 체계를 모두 제공하는 해당 루틴을 사용합니다. 예를 들어 x86 프로세서에서 InterlockedIncrementAcquire 및 InterlockedIncrementRelease 는 InterlockedIncrement와 동일합니다.
다음 표에서는 획득 전용 및 릴리스 전용 변형이 있는 루틴을 나열합니다.
인터록된 Xxx 루틴 | Acquire-Semantics-only 버전 | 릴리스 의미 체계 전용 버전 |
---|---|---|